溫馨提示×

溫馨提示×

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

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

PyQt5——窗口繪圖類控件

發布時間:2020-08-07 22:53:38 來源:ITPUB博客 閱讀:229 作者:ckxllf 欄目:編程語言

  窗口繪圖類控件

  在PyQt5中,一般可以通過QPainter、QPen和QBrush這三個類來實現繪圖的功能。

  QPainter

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

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

  方法

  方法  描述

  begin()  開始在目標設備上繪制

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

  drawEllipse()  在一個矩形內畫一個橢圓

  drawLine(int x1,int y1,int x2,int y2)  繪制一條指定了端點坐標的線。

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

  drawPolygon()  使用坐標數組繪制多邊形

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

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

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

  setBrush()  設置畫筆風格

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

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

  枚舉類型  描述

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

  Qt.SolidLine  一個簡單的線

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

  Qt.DotLine  由一些像素分割點

  Qt.DashDotLine  輪流交替的點和短線

  Qt.DashDotDotLine  一個短線、兩個點

  Qt.MPenStyle  畫筆風格的掩碼

  # -*- 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 = '歡迎學習 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("在窗口中畫點")

  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是一個基本的圖形對象,用于繪制直線、曲線或者輪廓畫出矩形、橢圓形、多邊形以及其他形狀。

  # -*- 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創建線條樣式,然后調用setDashPattern()方法使用數字列表定義樣式,數字列表的個數必須是偶數,在本例中數字列表[1,4,5,4]它的個數是4,奇數位代表一段橫線,偶數為代表兩端橫線之間的空余距離。

  QBrush

  QBrush是一個基本的圖形對象,用于填充如矩形、橢圓形或多邊形等形狀。QBrush有三種類型:預定義、過渡和紋理圖案。 無錫看婦科的醫院 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類用于繪圖設備的圖像顯示,可以作為一個QPaintDevice對象,也可以加載到一個控件中,通常是標簽或者按鈕,用于在標簽或按鈕上顯示圖像。

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

  常用的方法

  方法  描述

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

  fromImage()  將QImage對象轉換為QPixmap對象

  gradWidget()  從給定的窗口小控件創建一個像素圖

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

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

  toImage()  將QPixmap對象轉換為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問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女