QPainter是Qt框架中的一个类,用于在Qt基于应用程序中进行绘图和绘制图形。
使用QPainter,可以绘制各种形状,如线条、矩形、椭圆和多边形,以及文本和图像。它提供了用于指定颜色、画笔、笔刷和变换的方法。
QPainter
在 PyQt5 中,绘图操作通常在 QWidget 的 paintEvent() 方法中完成。所有的绘图函数调用都必须位于 QPainter.begin() 和 QPainter.end() 之间。
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter
from PyQt5.QtCore import Qt
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('我的窗口')
self.setGeometry(50, 50, 200, 150)
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
# 绘图操作...
painter.end()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())
通过设置 QWidget 的调色板(palette),可以用 QPainter 来改变背景颜色。
from PyQt5.QtGui import QColor, QFont
from PyQt5.QtCore import Qt
class MyWidget(QWidget):
# ... 省略其他代码 ...
def initUI(self):
# ... 省略其他代码 ...
self.setAutoFillBackground(True)
palette = self.palette()
palette.setColor(self.backgroundRole(), Qt.white) # 或者 Qt.black
self.setPalette(palette)
# ... 省略其他代码 ...
绘制文本
QPainter 的 drawText() 函数允许指定文本的位置和对齐方式。可以通过设置画笔(QPainter.setPen())和字体(QPainter.setFont())来自定义文本的外观。
from PyQt5.QtGui import QColor, QFont, QPainter
from PyQt5.QtCore import Qt, QPoint, QRect
class MyWidget(QWidget):
# ... 省略其他代码 ...
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setPen(QColor(0, 0, 255))
painter.setFont(QFont('Arial', 20))
painter.drawText(QPoint(10, 30), 'PyQt5')
# ... 省略其他代码 ...
painter.end()
绘制直线
from PyQt5.QtGui import QPen
class MyWidget(QWidget):
# ... 省略其他代码 ...
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
pen = QPen(Qt.black, 2, Qt.SolidLine)
painter.setPen(pen)
painter.drawLine(20, 40, 180, 40)
# ... 省略其他代码 ...
painter.end()
绘制矩形
class MyWidget(QWidget):
# ... 省略其他代码 ...
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setPen(Qt.black)
painter.drawRect(QRect(10, 10, 80, 80))
# ... 省略其他代码 ...
painter.end()
绘制椭圆和圆
class MyWidget(QWidget):
# ... 省略其他代码 ...
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setPen(Qt.black)
painter.drawEllipse(QRect(10, 30, 40, 80))
# ... 省略其他代码 ...
painter.end()
绘制圆弧和圆形
class MyWidget(QWidget):
# ... 省略其他代码 ...
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setPen(Qt.black)
painter.drawArc(QRect(20, 20, 50, 50), 0, 90*16) # 90度圆弧
# ... 省略其他代码 ...
painter.end()
绘制多边形:
from PyQt5.QtCore import QPoint
class MyWidget(QWidget):
# ... 省略其他代码 ...
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setPen(Qt.black)
p1 = QPoint(40, 40)
p2 = QPoint(60, 20)
p3 = QPoint(80, 40)
p4 = QPoint(80, 80)
p5 = QPoint(40, 80)
painter.drawPolygon([p1, p2, p3, p4, p5])
# ... 省略其他代码 ...
painter.end()
绘制图像
QPainter 还支持在 QWidget 上绘制图像。可以使用 QImage 或 QPixmap 来加载和显示图像。
from PyQt5.QtGui import QImage
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# ... 省略其他代码 ...
self.qimage = QImage('lena.jpg')
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.drawImage(QRect(10, 10, 120, 120), self.qimage)
painter.end()
# ... 省略其他代码 ...