You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用Qt Designer将自定义部件嵌入Stacked Widget页面的显示问题

解决PyQt5 StackedWidget无法显示自定义Widget内容的问题

你在对话框的StackedWidget中嵌入两个自定义部件时,程序无报错但部件内容无法显示,核心原因是自定义Widget类的UI初始化逻辑未被执行。

问题根源

你的widget_1_UI和widget_2_UI类虽然继承了QWidget,但仅定义了setupUi方法,实例化时没有调用该方法创建内部控件;同时setupUi的参数Form未关联到Widget自身,导致子控件没有被正确添加到目标Widget上。

解决方案

修改自定义Widget类,确保UI初始化逻辑在实例化时自动执行,以下提供两种实现方式:


方式一:保留setupUi方法,在__init__中调用

修改后的widget_1.py

from PyQt5 import QtCore, QtGui, QtWidgets

class widget_1_UI(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)  # 将自身传入setupUi,关联控件

    def setupUi(self, Form):
        Form.resize(614, 411)

        self.verticalLayout = QtWidgets.QVBoxLayout(Form)

        self.label = QtWidgets.QLabel(Form)
        font = QtGui.QFont()
        font.setPointSize(26)
        self.label.setFont(font)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setText("AY YO BBY GRILL")
        self.verticalLayout.addWidget(self.label)

        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setText("Dis one do nuffin")
        self.verticalLayout.addWidget(self.pushButton)

修改后的widget_2.py

from PyQt5 import QtCore, QtGui, QtWidgets

class widget_2_UI(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)

    def setupUi(self, Form):
        Form.resize(614, 411)

        self.verticalLayout = QtWidgets.QVBoxLayout(Form)

        self.label = QtWidgets.QLabel(Form)
        font = QtGui.QFont()
        font.setPointSize(26)
        self.label.setFont(font)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setText("HOW YOU DOIN")
        self.verticalLayout.addWidget(self.label)

        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setText("Dis do nuffin 2")
        self.verticalLayout.addWidget(self.pushButton)

方式二:直接将UI代码整合到__init__(更简洁)

修改后的widget_1.py

from PyQt5 import QtCore, QtGui, QtWidgets

class widget_1_UI(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.resize(614, 411)

        self.verticalLayout = QtWidgets.QVBoxLayout(self)

        self.label = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(26)
        self.label.setFont(font)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setText("AY YO BBY GRILL")
        self.verticalLayout.addWidget(self.label)

        self.pushButton = QtWidgets.QPushButton(self)
        self.pushButton.setText("Dis one do nuffin")
        self.verticalLayout.addWidget(self.pushButton)

修改后的widget_2.py

from PyQt5 import QtCore, QtGui, QtWidgets

class widget_2_UI(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.resize(614, 411)

        self.verticalLayout = QtWidgets.QVBoxLayout(self)

        self.label = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(26)
        self.label.setFont(font)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setText("HOW YOU DOIN")
        self.verticalLayout.addWidget(self.label)

        self.pushButton = QtWidgets.QPushButton(self)
        self.pushButton.setText("Dis do nuffin 2")
        self.verticalLayout.addWidget(self.pushButton)

主脚本dialog.py无需修改

保持你原来的dialog.py代码不变,运行后StackedWidget就能正常显示两个自定义页面的内容,点击切换按钮也能正常切换页面。

内容的提问来源于stack exchange,提问作者ARChalifour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:10:13