QStackedWidget作为QMainWindow中心控件无法完整显示子界面问题
问题根因
你遇到的问题是没有将QStackedWidget显式设置为QMainWindow的中心控件导致的。QMainWindow的核心布局结构要求必须调用setCentralWidget()方法指定中心控件,中心控件才会自动填充窗口的可用区域,否则你创建的QStackedWidget不会受到QMainWindow布局管理,只能显示默认的极小尺寸。
解决方案
- 在添加完QStackedWidget的子控件后,调用
setCentralWidget()将QStackedWidget设置为窗口的中心控件 - 如果你需要窗口启动时自动适配purchase界面的原生大小,可以额外调用
resize()方法配合控件的sizeHint()进行调整
修改后的完整代码如下:
class UISuperMarket(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('MASS Supermarket') self.setWindowIcon(QIcon('res/images/icon.png')) self.centralWidget = QStackedWidget(self) purchase = QWidget() ui = Ui_purchase() ui.setupUi(purchase) self.centralWidget.addWidget(purchase) self.centralWidget.setCurrentWidget(purchase) # 新增以下两行即可解决问题 self.setCentralWidget(self.centralWidget) self.resize(purchase.sizeHint()) self.setupMenuBar() self.show()
补充说明
如果你之后切换QStackedWidget的当前页面时,也希望窗口自动适配新页面的大小,可以绑定QStackedWidget的currentChanged信号,在信号触发时调用self.resize(self.centralWidget.currentWidget().sizeHint())即可。
内容的提问来源于stack exchange,提问作者user13756693
相关产品推荐
相关产品推荐

