PyQt5.ui文件未加载



因此,我的预期结果是在单击登录按钮时显示login.ui。我的代码达到了def gotologin函数和class LoginScreen,但它没有加载ui

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)
window = WelcomeScreen()
window.show()
try:
sys.exit(app.exec_())
except:
print('Exiting')

您的逻辑很奇怪,因为您正在创建2个WelcomeScreen:一个添加到QStackedWidget,另一个作为窗口。除此之外,QStackedWidget从未显示过。锦上添花的是,你不限制变量的范围。

考虑到以上内容,最好创建一个控制器来实现切换小部件的逻辑并限制作用域。

import sys
from functools import cached_property
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication, QDialog, QStackedWidget

class WelcomeScreen(QDialog):
def __init__(self):
super(WelcomeScreen, self).__init__()
loadUi("welcomescreen.ui", self)

class LoginScreen(QDialog):
def __init__(self):
super(LoginScreen, self).__init__()
loadUi("login.ui", self)

class Controller:
def __init__(self):
self.stacked_widget.addWidget(self.welcome)
self.stacked_widget.addWidget(self.login)
self.welcome.login.clicked.connect(self.goto_login)
@cached_property
def stacked_widget(self):
return QStackedWidget()
@cached_property
def welcome(self):
return WelcomeScreen()
@cached_property
def login(self):
return LoginScreen()
def goto_login(self):
self.stacked_widget.setCurrentWidget(self.login)

def main(args):
app = QApplication(args)
controller = Controller()
controller.stacked_widget.show()
sys.exit(app.exec_())

if __name__ == "__main__":
main(sys.argv)

最后,不要让例外沉默,因为它们存在的原因是表明出了问题。我更喜欢当程序失败时,它会对我大喊一个无声的错误,因为后者是许多错误的原因。

最新更新