Python 使用QT6 的画图指令
时间: 2025-05-22 20:39:18 浏览: 19
### Python QT6 绘图 API 文档与示例
在 Python 中使用 QT6 进行绘图的核心工具是 `QPainter` 类以及与其配合使用的其他类,如 `QPixmap`, `QImage`, 和 `QWidget`。以下是详细的说明和代码示例。
#### 使用 QPainter 进行基本绘图
`QPainter` 是 QT 提供的主要绘图类,用于执行各种绘图操作,例如绘制线条、矩形、椭圆等。为了实现这些功能,通常需要在一个继承自 `QWidget` 或其子类的对象中重写 `paintEvent` 方法[^1]。
```python
from PyQt6.QtWidgets import QWidget, QApplication
from PyQt6.QtGui import QPainter, QColor, QBrush
import sys
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 350, 100)
self.setWindowTitle('Drawing with QPainter')
def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
self.drawRectangle(qp)
qp.end()
def drawRectangle(self, qp):
color = QColor(0, 0, 0)
color.setNamedColor('#d4d4d4')
qp.setPen(color)
brush = QBrush(QColor(200, 0, 0))
qp.setBrush(brush)
qp.drawRect(10, 15, 90, 60)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec())
```
此代码展示了如何使用 `QPainter` 来绘制一个红色矩形[^1]。
#### 自定义画布对象 (Canvas)
如果希望构建更复杂的交互式绘图应用,则可以通过扩展 `QLabel` 创建一个自定义的画布对象。该对象能够响应用户的鼠标事件并动态更新画面内容[^1]。
```python
from PyQt6.QtCore import QPoint
from PyQt6.QtGui import QPixmap, QPainter, QColor
from PyQt6.QtWidgets import QLabel
class Canvas(QLabel):
def __init__(self):
super().__init__()
pixmap = QPixmap(600, 300)
pixmap.fill(QColor("#FFFFFF")) # 设置背景颜色为白色
self.setPixmap(pixmap)
self.last_x, self.last_y = None, None
self.pen_color = QColor('#000000')
def set_pen_color(self, c):
self.pen_color = QColor(c)
def mouseMoveEvent(self, e):
if self.last_x is None:
self.last_x = e.x()
self.last_y = e.y()
return
canvas = self.pixmap()
painter = QPainter(canvas)
p = painter.pen()
p.setWidth(4)
p.setColor(self.pen_color)
painter.setPen(p)
painter.drawLine(self.last_x, self.last_y, e.x(), e.y())
painter.end()
self.setPixmap(canvas)
self.update() # 更新显示区域
self.last_x = e.x()
self.last_y = e.y()
def mouseReleaseEvent(self, e):
self.last_x = None
self.last_y = None
```
这段代码实现了允许用户通过拖动鼠标自由绘画的功能,并支持更改画笔的颜色[^1]。
#### 跨平台注意事项
当开发跨平台的应用程序时,应考虑到不同操作系统之间可能存在细微差别。尽管 QT 努力隐藏底层差异,但在某些情况下仍然需要注意这些问题,比如字体渲染效果的不同或是硬件加速的支持程度不一等问题[^2]。
---
阅读全文
相关推荐



















