如何调整QWidget的大小而不产生中间痛苦

2024-10-03 21:30:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在研究过程中,Qt遇到了这样的问题。假设我在QMainWindow上有一个QWidget。如何确保在调整QMainWindow大小时,QWidget在此QMainWindow上不重新绘制内容,直到大小调整没有停止。在

是的,我看到了这个例子How to disable multiple auto-redrawing at resizing widgets in PyQt?

但当我尝试这个方法时,它只是锁定了小部件内容。我只是想知道,在调整MainWindow大小时,是否可以确保QWidget的内容没有改变。请告诉我,这可能吗?在

非常感谢。在


Tags: to内容auto过程绘制multipleqtat
1条回答
网友
1楼 · 发布于 2024-10-03 21:30:03

我仍在猜测您到底想要什么,但听起来好像您基本上需要两种模式来使用paintEvent方法,一种是通常的模式,它负责大部分时间呈现小部件,另一种是轻量级的模式,可以在调整小部件大小时使用。在

如果是这样的话,你可以试试下面的方法。。。在

#!/usr/bin/python3
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class widget(QWidget):
    def __init__(self):
        super().__init__()
        self.resize_timer = QTimer(self)
        self.resize_timer.setSingleShot(True)
        self.resize_timer.setInterval(100)
        self.resize_timer.timeout.connect(self.delayed_update)

    def delayed_update(self):
        self.update()

    def paintEvent(self, event):
        if self.resize_timer.isActive():
            print("painting deferred")

            # Your `lightweight' rendering goes here and will be used
            # while the widget is being resized.
        else:
            print("painting now")

            # Full rendering code goes here.

    def resizeEvent(self, event):
        super(widget, self).resizeEvent(event)
        self.resize_timer.start()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    f = widget()
    f.show()
    sys.exit(app.exec_())

请注意,它本质上只是对链接到的答案中代码的简单修改。在

相关问题 更多 >