2017-01-17 52 views
0

欢迎!重新设置widget的布局pyqt

我想用PyQT创建我自己的gui app(5我猜)。那么,mainwindow由菜单栏,状态栏和中央部件组成。中央部件是QTabWidget。在每个标签中都有它自己的工作场所小部件。

程序本身允许创建一个OpenFOAM阶段的管道,为每个进程设置选项并启动它。这一切都是在一个小部件中制作的,它是标签中唯一的小部件。

我遇到的问题连接到QLayout。我正在使用QHBoxLayout s和QVBoxLayout s组合启动任务的每个步骤。当我开始初始self.setLayout(somelayout1)它工作正常。但是,当我使用此小部件的类self.setLayout(somelayout2),self.setLayout(somelayout3)等的不同方法进行下一步操作时,新布局将变为正在绘制在所有先前布局的顶部。不仅如此:以前布局的所有图层中未被新图层覆盖的部分仍保持活跃状态​​!

尚未找到任何禁用旧版布局的工作方法,或者更好:删除它。已经尝试过,甚至创造1元的布局容器中,用self.layout().removeItem(0)self.layout().setLayout(newlayout)(或.inserLayout(newlayout)影响,但没有任何区别。

是否有任何的工作方法来改变小窗口的布局,而不出现在一个旧的擦屁股

感谢您的帮助

PS:?。self.setStyleSheet("QWidget { background-color: rgb(255, 255, 255) }") 既不QObjectCleanupHandler().add(self.layout())都毫无效果

+1

[QStackedWidget](https://doc.qt.io/qt-5/qstackedwidget.html)。 – ekhumoro

+0

@ekhumoro我会尝试,并留下回复,谢谢! – Amphyby

+1

PS:要删除布局及其所有小部件,请参阅[本答案](http://stackoverflow.com/a/9383780/984421)。 – ekhumoro

回答

1

的方式,以确保从旧布局删除widget是USI ng sip.delete(somewidget)。这会删除C++对象本身(因为它有时会自己保留)