簡體   English   中英

PyQt5.ui 文件未加載

[英]PyQt5 .ui file not loading

所以我的預期結果是 login.ui 在單擊登錄按鈕時顯示。 我的代碼到達def gotologin function 和class LoginScreen ,但它不加載用戶界面

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,第二個添加為 window。 除此之外,從未顯示過 QStackedWidget。 作為錦上添花,您不會限制變量的范圍。

考慮到上述情況,最好創建一個 controller 來實現切換小部件和限制范圍的邏輯。

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)

最后,不要讓異常保持沉默,因為它們存在的原因是表明某些事情是錯誤的。 我更喜歡當程序失敗時,它會向我大喊一個無聲的錯誤,因為后者是許多錯誤的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM