如何在没有中间画的情况下调整QWidget的大小

时间:2017-06-21 10:03:18

标签: python qt pyqt

在研究期间,Qt遇到了这样的问题。假设QWidget上有QMainWindow。如何确保在我QMainWindow上调整QWidgetQMainWindow QWidget时,请不要重新调整内容,直到调整大小没有停止。

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

但是当我尝试这种方法时,它只是锁定了小部件内容。我只是想知道在调整MainWindow大小时是否有可能确保Public c As Collection Private Sub UserForm_Initialize() Dim ctl As Control Dim cls As clsCustomImage Set c = New Collection For Each ctl In Me.Controls If TypeName(ctl) = "Image" Then Set cls = New clsCustomImage cls.init ctl c.Add cls, CStr(c.Count) End If Next ctl End Sub 的内容没有改变。请告诉我,这可能吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

我仍在猜测你想要什么,但听起来好像你基本上想要两种模式用于你的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_())

请注意,它只是对您链接的答案中代码的简单修改。