PyQt5点击登录按钮后login.ui界面无法加载问题求助
问题原因
你的代码核心错误是重复实例化了欢迎界面,且显示的是未和堆叠容器绑定的独立实例:
- 你先创建了
welcome = WelcomeScreen()并添加到了QStackedWidget容器widget中,这个是正确关联了容器的实例 - 后续又单独创建了
window = WelcomeScreen()并调用show()显示,这个实例和前面的widget容器完全无关,点击登录时操作的是全局的widget容器,但你从来没有显示过这个容器,自然看不到登录界面加载。
修正后的完整代码
import sys from PyQt5.uic import loadUi from PyQt5 import QtWidgets from PyQt5.QtWidgets import QDialog, QApplication class WelcomeScreen(QDialog): def __init__(self): super(WelcomeScreen, self).__init__() loadUi('welcomescreen.ui', self) self.login.clicked.connect(self.gotologin) def gotologin(self): login = LoginScreen() widget.addWidget(login) widget.setCurrentIndex(widget.currentIndex()+1) class LoginScreen(QDialog): def __init__(self): super(LoginScreen, self).__init__() loadUi('login.ui', self) app = QApplication(sys.argv) welcome = WelcomeScreen() widget = QtWidgets.QStackedWidget() widget.addWidget(welcome) widget.setFixedHeight(800) widget.setFixedWidth(1200) # 删掉重复的WelcomeScreen实例,直接显示堆叠容器即可 widget.show() try: sys.exit(app.exec_()) except: print('Exiting')
修改说明
- 移除了重复创建的
window = WelcomeScreen()和window.show()代码 - 改为直接调用
widget.show()显示堆叠容器,容器内已经包含了绑定好点击事件的欢迎界面,点击登录后切换到登录界面的逻辑就可以正常生效 - 额外优化建议:可以把
widget作为参数传入类中避免使用全局变量,当前场景下上面的修改已经可以解决问题。
内容的提问来源于stack exchange,提问作者cheese
相关产品推荐
相关产品推荐

