未加载PyQt5.ui文件

2024-05-15 16:00:06 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我的预期结果是login.ui在单击login按钮时显示。我的代码到达了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')

Tags: fromimportselfuiinitdefsyslogin
1条回答
网友
1楼 · 发布于 2024-05-15 16:00:06

您的逻辑很奇怪,因为您正在创建两个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)

最后,不要让例外沉默,因为它们存在的原因是为了表明有什么不对劲。我更喜欢当程序失败时,它会对我大喊大叫,因为后者是许多错误的原因

相关问题 更多 >