You need to enable JavaScript to run this app. QStackedWidget作为QMainWindow中心控件无法完整显示子界面问题
优惠活动
大模型
产品
解决方案
定价
更多

QStackedWidget作为QMainWindow中心控件无法完整显示子界面问题

问题根因

你遇到的问题是没有将QStackedWidget显式设置为QMainWindow的中心控件导致的。QMainWindow的核心布局结构要求必须调用setCentralWidget()方法指定中心控件,中心控件才会自动填充窗口的可用区域,否则你创建的QStackedWidget不会受到QMainWindow布局管理,只能显示默认的极小尺寸。

解决方案

  1. 在添加完QStackedWidget的子控件后,调用setCentralWidget()将QStackedWidget设置为窗口的中心控件
  2. 如果你需要窗口启动时自动适配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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 01:15:05