PyQt5——視窗繪圖類控制元件
視窗繪圖類控制元件
在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有三種型別:預定義、過渡和紋理圖案。 無錫看婦科的醫院
# -*- 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_())
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2657546/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PyQt5視窗繪圖控制元件QT繪圖控制元件
- PyQt5 帶視窗圖示QT
- PyQT5之設定視窗控制元件風格QT控制元件
- PyQT5繪圖QT繪圖
- PyQt5 之主視窗QT
- PyQT5之視窗QT
- PyQt5 之視窗居中QT
- pyqt5建立主視窗(介紹視窗型別)QT型別
- PyQt5 之關閉視窗QT
- 使用Windows API進行GDI視窗繪圖WindowsAPI繪圖
- PyQT5視窗樣式設定QT
- pyqt5之簡單視窗的建立QT
- PyQT5之訊號關閉視窗QT
- QT視窗類QT
- 子視窗控制元件(轉)控制元件
- 如何修改CAD夢想畫圖繪圖視窗的背景顏色繪圖
- PyQT5之視窗最大化最小化QT
- flutter: 視窗初始與繪製流程Flutter
- PyQt5(2)、垃圾分類小程式(2)——初代視窗程式可執行檔案QT
- QT 讓視窗(或控制元件)居中QT控制元件
- mfc+最大最小化視窗+控制元件變化+圖片(視訊幀)顯示在控制元件上控制元件
- 使用Drawing 類繪圖繪圖
- MFC操作父視窗的子控制元件控制元件
- 使用java繪圖類Graphics繪製圓圈Java繪圖
- 使用 PyQt5 實現圖片檢視器QT
- PyQt5主視窗動態載入Widget例項程式碼QT
- .NET 視窗/螢幕截圖
- PyQt5程式設計(23):在視窗中佈局元件—絕對定位QT程式設計元件
- 解決matplotlib使用plt.pause動態繪圖視窗無法關閉問題繪圖
- Python繪圖與視覺化Python繪圖視覺化
- 人工設定視窗圖示 (轉)
- Windows常見視窗樣式和控制元件風格Windows控制元件
- iOS 控制元件檢視基類之 UIViewiOS控制元件UIView
- android的視窗機制分析------ViewRoot類AndroidView
- Delpi在MDI視窗中顯示圖形控制元件及指定背景的解決方案 (轉)控制元件
- 自定義控制元件之kotlin繪製折線圖和曲線圖控制元件Kotlin
- PyQT5之滑塊控制元件QSliderQT控制元件IDE
- 玩轉控制元件:GDI+動態繪製流程圖控制元件流程圖