这是我刚刚开发的答案!!! (注意:这将以 PyQt4 形式给出)
我需要能够在显示和隐藏额外面板时重新调整我的应用程序窗口的大小。
然而在过去,我最终只是重新配置了 UI 和/或工作流程,因此不需要重新调整窗口大小。但是现在它是必须的。
窗口可以在创建过程中调整大小。窗口可以直接调整大小(例如 self.resize( xSize, ySize )
但是,如果您创建一些代码行来捕获所需的大小、隐藏所需的部分、重新计算大小应该是多少,那么似乎根本不需要重新调整大小。
(示例)
curHgt = self.size().height()
curWth = self.size().width()
myFrmHgt = self.ui.reviewFrm.size().height()
self.ui.reviewFrm.hide()
self.resize( curWth, (curHgt - myFrmHgt ) )
什么都没有。不工作。为什么不呢?
今天的寻找答案仍然没有找到可行的答案。有多种选择。查找小部件层次结构、无效、调整大小。如果您尝试重新调整主窗口的大小,那么一个相当详尽的布局抖动将无法正常工作。还有一个压倒性的回应说将您的约束设置为 FixedSize。但这反而违背了整个目的,有点像说如果你有一个挂钉子,就把你的手从手腕上割下来。
但是,我确实偶然发现有人在挖掘方面取得了一些成功,并发现调整大小没有生效的原因是由于发布事件队列将重置调整大小。
他的解决方案是在重新调整应用程序大小之前运行 QApplication.sendPostedEvents(),这样排队的事件就不会重置您的窗口。
是的,不。
是的,这就是解决方案,我相信有一种更漂亮的方法,但你需要先像洗过的油漆滚筒一样把队列摇出来。
这是我设置的简单 sn-p,到目前为止似乎很可靠。
result = [ self.size().width(), self.size().height() ]
if self.ui.reviewFrm.isVisible():
result[1] -= self.ui.reviewFrm.size().height()
self.ui.reviewFrm.hide()
while self.size().height() > result[1]:
self.appy.sendPostedEvents()
self.resize( result[0], result[1] )
不。它不漂亮。但是,在发布的事件允许窗口调整大小之前,我最多只看到它晃动油漆滚筒两次。
无需锁定约束或摇动父小部件或爬过层次结构寻找尺寸提示。