QPainter
功能:QPainter實現在QWidget上畫圖功能
說明:繪圖必須在paintEvent中完成,且要在bengin和end之間作圖
接口:
方法 | 描述 |
begin | 開始畫圖 |
end | 結束畫圖 |
drawLine(int x1, int y1, int x2, int y2) | 繪制直線從(x1,y1)到(x2,y2) |
drawRect(int x, int y, int w, int h) | 繪制矩形起始坐標(x,y),寬度w,高度h |
drawText | 繪制字符串 |
FillRect | 使用顏色填充矩形 |
setBrush | 設置畫刷 |
setPen | 設置畫筆 |
QPen
功能:畫筆,主要是設置線條的格式和顏色
QBrush
功能:畫刷,主要是設置填充的格式和顏色
例子
import random import string import sys from PyQt5.QtCore import Qt, QRect from PyQt5.QtGui import QPainter, QFont, QColor, QPen, QBrush from PyQt5.QtWidgets import QApplication, QWidget class MyWidget(QWidget): def __init__(self): super(MyWidget, self).__init__() # def paintEvent(self, QPaintEvent): # painter = QPainter(self) # painter.begin(self) # painter.setFont(QFont('Courier New', 20)) # painter.setPen(QColor(168, 34, 3)) # painter.drawText(QPaintEvent.rect(), Qt.AlignCenter, 'hello world') # painter.end() # def paintEvent(self, QPaintEvent): # painter = QPainter(self) # painter.begin(self) # painter.setFont(QFont('Courier New', 20)) # painter.setPen(QColor(168, 34, 3)) # # for i in range(10000): # painter.drawPoint(random.randint(0, 300), random.randint(0, 300)) # # painter.end() # def paintEvent(self, QPaintEvent): # painter = QPainter(self) # painter.begin(self) # # pen = QPen(Qt.red, 2, Qt.SolidLine) # painter.setPen(pen) # painter.drawLine(20, 20, 400, 20) # # pen.setStyle(Qt.DashDotLine) # painter.setPen(pen) # painter.drawLine(20, 40, 400, 40) # # painter.end() # def paintEvent(self, QPaintEvent): # painter = QPainter(self) # painter.begin(self) # # brush = QBrush(Qt.SolidPattern) # brush.setColor(Qt.green) # painter.setBrush(brush) # painter.drawRect(20, 20, 200, 100) # # brush = QBrush(Qt.HorPattern) # brush.setColor(Qt.red) # painter.setBrush(brush) # painter.drawRect(20, 140, 200, 100) # # painter.end() # 實現隨機驗證碼 def paintEvent(self, QPaintEvent): painter = QPainter(self) painter.begin(self) painter.setFont(QFont('Courier New', 50)) randomString = "".join([random.choice(string.digits + string.ascii_letters) for i in range(10)]) for i in range(len(randomString)): painter.setPen(QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))) painter.drawText(50 + i * 40, 150, randomString[i]) for i in range(25000): painter.setPen(QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))) painter.drawPoint(random.randint(0, 500), random.randint(0, 300)) painter.end() if __name__ == '__main__': app = QApplication(sys.argv) w = MyWidget() w.resize(500, 300) w.move(300, 300) w.setWindowTitle('Simple') w.show() sys.exit(app.exec_())