由于在自定义绘制事件中绘制文本,Qt应用程序在启动时闪烁

时间:2017-11-24 14:23:25

标签: python qt pyqt pyqt5

我发现了一种非常奇怪的行为,在某些情况下应用程序启动时会导致闪烁(白色矩形显示为主窗口约半秒钟)。经过长时间的测试和试用后,我将问题缩小到在我的自定义小部件的绘制事件中首次绘制文本时的情况。如果在另一个小部件(例如QLabel)中也绘制了文本,则问题就消失了。但我的应用程序主窗口只有带图标的工具按钮和绘制文本的自定义小部件,没有其他小部件。白色眨眼是非常难看的,我想摆脱它,理想情况下有一些适当的解决方案,没有讨厌的黑客介绍一些人工文字绘图小部件。此外,我不是很舒服,因为我真的不知道实际发生了什么。为什么自定义小部件会导致闪烁而QLabel没有?要证明行为,请尝试以下代码(同样的问题在C ++ / Qt中,因此它不是由Python包装器引起的)。然后尝试取消注释标记的行并注释下一行以查看闪烁消失。

from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QLabel

class CustomWidget(QWidget):
    def paintEvent(self, event):
        p = QPainter(self)
        p.drawText(20, 20, "XYZ")

app = QApplication([])
container = QWidget()
layout = QVBoxLayout(container)
# label = QLabel("ABC")  # uncomment this to prevent blinking
label = QLabel()  # comment this out to prevent blinking
layout.addWidget(label)
layout.addWidget(CustomWidget())
container.resize(600, 600)
container.show()
app.exec()

有什么想法吗?我正在使用Qt 5.9.2。

0 个答案:

没有答案