【问题标题】:How to resize QWidget without intermediate paint如何在没有中间绘制的情况下调整 QWidget 的大小
【发布时间】:2017-06-21 10:03:18
【问题描述】:

在学习过程中,Qt遇到了这样一个问题。假设我在QMainWindow 上有一个QWidget。如何确保当我在此 QMainWindow 上调整 QMainWindowQWidget 的大小时,在调整大小不会停止之前不会重新绘制内容。

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

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

非常感谢。

【问题讨论】:

  • 如果您链接到的答案不是您想要的,那么您需要更详细地解释您想要什么。
  • 好吧,当我们从链接中执行示例时,我们会遇到以下情况。当我们开始调整大小时,QWidget 中的内容只是隐藏,当我们停止调整主窗口大小时它会取消隐藏。所以,当我们调整 QMainWindow 的大小时,QWidget 的内容是不可见的,这是不好的。我只是想知道,可能有一种方法可以确保内容不会在调整大小时发生变化,并在我们完成调整大小时重新绘制
  • 那么,当小部件调整大小时,您希望在小部件中看到什么?
  • 可能类似于我们调整 QSplitters 的大小。我们开始调整大小,内容保持不变,完成后重新绘制。这可能吗?

标签: python qt pyqt


【解决方案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_())

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

【讨论】:

  • 谢谢。我会试试看=)
猜你喜欢
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多