You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PYQT5绘制直线无显示问题求助:如何正确绘制直线?

解决PyQt5绘制直线不显示的问题

哦,这个问题我太熟悉了!你当前的代码之所以看不到直线,核心原因是绘制时机不对——PyQt里的持久绘制操作不能直接放在initUI这类初始化方法里,得依赖系统的paintEvent事件来触发。

问题根源

你现在是在窗口初始化的时候用QPainter画了一次直线,但窗口显示时系统会自动触发paintEvent事件,重新绘制整个窗口的内容,这时候你之前画的直线就被覆盖掉了,所以界面上啥都看不到。

正确的实现方式

要让直线一直显示,你需要重写窗口类的paintEvent方法,把绘制逻辑放在这个方法里。每次窗口需要刷新(比如刚显示、被遮挡后恢复、调整大小),系统都会调用这个方法,你的直线也就会被重新绘制出来。

修改后的完整代码

from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'Main menu'
        self.left = 80
        self.top = 80
        self.width = 1500
        self.height = 1000
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.show()

    def paintEvent(self, event):
        # 必须在paintEvent方法内创建QPainter实例
        painter = QPainter(self)
        # 设置画笔:黑色、2px宽度、实线样式
        painter.setPen(QPen(Qt.black, 2, Qt.SolidLine))
        # 绘制直线:起点(200,200),终点(400,400)
        painter.drawLine(200, 200, 400, 400)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

几个关键细节

  • paintEvent的作用:这是PyQt窗口绘制的核心入口,所有需要持久显示的图形都应该在这里绘制,保证内容不会因为窗口刷新而消失。
  • 关于setBrush:你原来代码里的painter.setBrush(Qt.black)其实对绘制直线没用——brush是用来填充闭合图形(比如矩形、圆形)的,直线只受pen的控制,所以可以去掉这行代码。

内容的提问来源于stack exchange,提问作者Nar Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:27:42