溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PyQt5——窗口繪圖類控件

發(fā)布時(shí)間:2020-08-07 22:53:38 來源:ITPUB博客 閱讀:199 作者:ckxllf 欄目:編程語言

  窗口繪圖類控件

  在PyQt5中,一般可以通過QPainter、QPen和QBrush這三個(gè)類來實(shí)現(xiàn)繪圖的功能。

  QPainter

  QPainter類在QWidget上執(zhí)行繪圖操作,它是一個(gè)繪制工具,為大部分圖形界面提供了高度優(yōu)化的函數(shù),是QPainter類可以繪制從簡單的直線到復(fù)雜的餅圖。

  繪制操作在QWidget.painEvent()中完成,繪制方法必須放在QtGui.QPainter對象的begin()和end()之間。QPainter類在控件或其他繪圖設(shè)備上執(zhí)行較低級別的圖形繪制功能。

  方法

  方法  描述

  begin()  開始在目標(biāo)設(shè)備上繪制

  drawArc()  在起始角度和最終角度之間畫弧

  drawEllipse()  在一個(gè)矩形內(nèi)畫一個(gè)橢圓

  drawLine(int x1,int y1,int x2,int y2)  繪制一條指定了端點(diǎn)坐標(biāo)的線。

  drawPixmap()  從圖像文件中提取Pixmap并將其顯示在指定的位置

  drawPolygon()  使用坐標(biāo)數(shù)組繪制多邊形

  drawReact()  給定寬度w和高度h從左上角(x,y)繪制一個(gè)矩形

  drawText()  顯示給定坐標(biāo)處的文字

  fillRect()  使用QColor參數(shù)填充矩形

  setBrush()  設(shè)置畫筆風(fēng)格

  setPen()  設(shè)置用于繪制的筆的顏色、大小和樣式

  還可以設(shè)置畫筆風(fēng)格(PenStyle),這是一個(gè)枚舉類,可以由QPainter類繪制。

  枚舉類型  描述

  Qt.NoPen  沒有線,比如QPainter.drawRect()填充,但沒有繪制任何邊界線

  Qt.SolidLine  一個(gè)簡單的線

  Qt.DashLine  由一些像素分隔的短線

  Qt.DotLine  由一些像素分割點(diǎn)

  Qt.DashDotLine  輪流交替的點(diǎn)和短線

  Qt.DashDotDotLine  一個(gè)短線、兩個(gè)點(diǎn)

  Qt.MPenStyle  畫筆風(fēng)格的掩碼

  # -*- coding: utf-8 -*-

  import sys

  from PyQt5.QtWidgets import QApplication, QWidget

  from PyQt5.QtGui import QPainter, QColor, QFont

  from PyQt5.QtCore import Qt

  class Drawing(QWidget):

  def __init__(self, parent = None):

  super(Drawing, self).__init__(parent)

  self.setWindowTitle("在窗口中繪制文字")

  self.resize(300,200)

  self.text = '歡迎學(xué)習(xí) PyQt5'

  def paintEvent(self, event):

  painter = QPainter(self)

  painter.begin(self)

  # 自定義繪制方法

  self.drawText(event, painter)

  painter.end()

  def drawText(self, event, qp):

  qp.setPen(QColor(168, 34, 3))

  qp.setFont(QFont('SimSun', 20))

  qp.drawText(event.rect(), Qt.AlignCenter, self.text)

  if __name__ == '__main__':

  app = QApplication(sys.argv)

  demo = Drawing()

  demo.show()

  sys.exit(app.exec_())

  # -*- coding: utf-8 -*-

  import sys, math

  from PyQt5.QtWidgets import *

  from PyQt5.QtGui import *

  from PyQt5.QtCore import *

  class Drawing(QWidget):

  def __init__(self, parent = None):

  super(Drawing, self).__init__(parent)

  self.resize(300,200)

  self.setWindowTitle("在窗口中畫點(diǎn)")

  def paintEvent(self, event):

  qp = QPainter(self)

  qp.begin(self)

  self.drawPoints(qp)

  qp.end()

  def drawPoints(self,qp):

  qp.setPen(Qt.red)

  size = self.size()

  for i in range(1000):

  x = 100 * (-1+2.0 * i /1000) + size.width()/2.0

  y = -50 * math.sin((x-size.width()/2.0)*math.pi /50)+size.height()/2.0

  qp.drawPoint(x ,y)

  if __name__ == '__main__':

  app = QApplication(sys.argv)

  demo = Drawing()

  demo.show()

  sys.exit(app.exec_())

  QPen

  QPen是一個(gè)基本的圖形對象,用于繪制直線、曲線或者輪廓畫出矩形、橢圓形、多邊形以及其他形狀。

  # -*- coding: utf-8 -*-

  import sys

  from PyQt5.QtWidgets import *

  from PyQt5.QtGui import *

  from PyQt5.QtCore import *

  class Drawing(QWidget):

  def __init__(self):

  super().__init__()

  self.initUI()

  def initUI(self):

  self.setGeometry(300,300,280,270)

  self.setWindowTitle("鋼筆樣式例子")

  def paintEvent(self, QPaintEvent):

  qp = QPainter()

  qp.begin(self)

  self.drawLines(qp)

  qp.end()

  def drawLines(self, qp):

  pen = QPen(Qt.black, 2, Qt.SolidLine)

  qp.setPen(pen)

  qp.drawLine(20,40,250,40)

  pen.setStyle(Qt.DashLine)

  qp.setPen(pen)

  qp.drawLine(20,80, 250,80)

  pen.setStyle(Qt.DashDotLine)

  qp.setPen(pen)

  qp.drawLine(20,120,250,120)

  pen.setStyle(Qt.DotLine)

  qp.setPen(pen)

  qp.drawLine(20,160,250,160)

  pen.setStyle(Qt.DashDotDotLine)

  qp.setPen(pen)

  qp.drawLine(20,200,250,200)

  pen.setStyle(Qt.CustomDashLine)

  pen.setDashPattern([1,4,5,4])

  qp.setPen(pen)

  qp.drawLine(20,240,250,240)

  if __name__ == '__main__':

  app = QApplication(sys.argv)

  demo = Drawing()

  demo.show()

  sys.exit(app.exec_())

  使用Qt.CustomDashLine創(chuàng)建線條樣式,然后調(diào)用setDashPattern()方法使用數(shù)字列表定義樣式,數(shù)字列表的個(gè)數(shù)必須是偶數(shù),在本例中數(shù)字列表[1,4,5,4]它的個(gè)數(shù)是4,奇數(shù)位代表一段橫線,偶數(shù)為代表兩端橫線之間的空余距離。

  QBrush

  QBrush是一個(gè)基本的圖形對象,用于填充如矩形、橢圓形或多邊形等形狀。QBrush有三種類型:預(yù)定義、過渡和紋理圖案。 無錫看婦科的醫(yī)院 http://www.ytsgfk120.com/

  # -*- coding: utf-8 -*-

  import sys

  from PyQt5.QtWidgets import *

  from PyQt5.QtGui import *

  from PyQt5.QtCore import Qt

  class Drawing(QWidget):

  def __init__(self):

  super().__init__()

  self.initUI()

  def initUI(self):

  self.setGeometry(300,300,365,280)

  self.setWindowTitle("畫刷例子")

  self.show()

  def paintEvent(self, QPaintEvent):

  qp = QPainter()

  qp.begin(self)

  self.drawLines(qp)

  qp.end()

  def drawLines(self,qp):

  brush = QBrush(Qt.SolidPattern)

  qp.setBrush(brush)

  qp.drawRect(10,15,90,60)

  brush = QBrush(Qt.Dense1Pattern)

  qp.setBrush(brush)

  qp.drawRect(130, 15, 90, 60)

  brush = QBrush(Qt.Dense2Pattern)

  qp.setBrush(brush)

  qp.drawRect(250, 15, 90, 60)

  brush = QBrush(Qt.Dense3Pattern)

  qp.setBrush(brush)

  qp.drawRect(10, 105, 90, 60)

  brush = QBrush(Qt.DiagCrossPattern)

  qp.setBrush(brush)

  qp.drawRect(10, 105, 90, 60)

  brush = QBrush(Qt.Dense5Pattern)

  qp.setBrush(brush)

  qp.drawRect(130, 105, 90, 60)

  brush = QBrush(Qt.Dense6Pattern)

  qp.setBrush(brush)

  qp.drawRect(250, 105, 90, 60)

  brush = QBrush(Qt.HorPattern)

  qp.setBrush(brush)

  qp.drawRect(10, 195, 90, 60)

  brush = QBrush(Qt.VerPattern)

  qp.setBrush(brush)

  qp.drawRect(130, 195, 90, 60)

  brush = QBrush(Qt.BDiagPattern)

  qp.setBrush(brush)

  qp.drawRect(250, 195, 90, 60)

  if __name__ =='__main__':

  app = QApplication(sys.argv)

  demo = Drawing()

  demo.show()

  sys.exit(app.exec_())

  QPixmap

  QPixmap類用于繪圖設(shè)備的圖像顯示,可以作為一個(gè)QPaintDevice對象,也可以加載到一個(gè)控件中,通常是標(biāo)簽或者按鈕,用于在標(biāo)簽或按鈕上顯示圖像。

  QPixmap可以讀取的圖像文件類型有BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM、XPM等。

  常用的方法

  方法  描述

  copy()  從QRect對象復(fù)制到QPixmap對象

  fromImage()  將QImage對象轉(zhuǎn)換為QPixmap對象

  gradWidget()  從給定的窗口小控件創(chuàng)建一個(gè)像素圖

  load()  加載圖像文件作為QPixmap對象

  save()  將QPixmap對象保存為文件

  toImage()  將QPixmap對象轉(zhuǎn)換為QImage對象

  # -*- coding: utf-8 -*-

  import sys

  from PyQt5.QtCore import *

  from PyQt5.QtGui import *

  from PyQt5.QtWidgets import *

  if __name__ == '__main__':

  app = QApplication(sys.argv)

  win = QWidget()

  labl = QLabel()

  labl.setPixmap(QPixmap("./images/python.jpg"))

  vbox = QVBoxLayout()

  vbox.addWidget(labl)

  win.setLayout(vbox)

  win.setWindowTitle("QPixmap例子")

  win.show()

  sys.exit(app.exec_())

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI