首页 > 解决方案 > PyQt5:无法重新加载以前使用的 QWidget?

问题描述

我目前正在为我目前工作的学生宿舍编写某种酒吧标签保存的东西。为此,我有两个不同的 QScrollAreas 和两个 QWidget,每个 QGridLayout 都有一个。一个用于用户选择,另一个用于选择要购买的项目。

当我使用 切换到项目选择界面时一切正常 self.scrollArea.setWidget(self.itemWidget),但是我还实现了一个后退按钮,以防选择了错误的用户,这应该回到第一个 QWidget 启动:self.scrollArea.setWidget(self.userWidget),在我看来应该只是加载以前构建的再次布局,但我收到此错误:

RuntimeError: wrapped C/C++ object of type QWidget has been deleted

我哪里做错了?有谁可以帮我离开这里吗?

标签: pythonqtpyqtpyqt5qt5

解决方案


文档setWidget()明确指出:

小部件成为滚动区域的子级,并在删除滚动区域或设置新的小部件时被销毁。

您需要做的是takeWidget()在设置另一个小部件之前先调用。

或者,您可以使用 aQStackedWidget作为两个小部件的容器。


推荐阅读