重新设置widget pyqt的布局

时间:2017-01-17 16:00:12

标签: python c++ qt layout pyqt

欢迎!

我正在尝试使用PyQT创建我自己的gui应用程序(5我猜)。好吧,主窗口包括菜单栏,状态栏和中央窗口小部件。中央小部件是QTabWidget。在每个标签中都有它自己的工作场所小部件。

程序本身允许创建OpenFOAM阶段的pipline,为每个进程设置选项并启动它。所有这些都是在一个小部件中制作的,它是选项卡中唯一的小部件。

我遇到的问题与 QLayout 有关。我在启动任务的每个步骤中使用 QHBoxLayout QVBoxLayout 组合。当我创建初始self.setLayout(somelayout1)时,它工作正常。但是当我使用此窗口小部件的self.setLayout(somelayout2)self.setLayout(somelayout3)等不同方法的后续步骤时,新布局将被绘制在所有先前布局的顶部。不止于此:所有层次'以前布局的部分未被新的部分覆盖仍然有效!

找不到任何禁用窗口小部件旧布局的工作方法,或者更好:删除它。已经尝试过创建一个1个元素的布局容器并使用self.layout().removeItem(0)self.layout().setLayout(newlayout)(或.inserLayout(newlayout)来影响它,但没有区别。

是否有任何工作方法可以更改窗口小部件的布局而不会在背面显示旧窗格?

感谢您的帮助。

p.s。:self.setStyleSheet("QWidget { background-color: rgb(255, 255, 255) }") QObjectCleanupHandler().add(self.layout())都没有效果。

1 个答案:

答案 0 :(得分:1)

确保从旧布局中删除窗口小部件的方法是使用sip.delete(somewidget)。这将删除C ++对象本身(因为有时它会保留C ++对象自己的