簡體   English   中英

從一個小部件移動到另一個 PyQt5

[英]Moving From one widget to another PyQt5

我在 PyQT 設計器中設計了小部件。 這是具有自定義大小和模板的無框小部件。 我正在使用兩個不同的小部件依次運行以登錄我的主應用程序。 第一個小部件是 WelcomeScreenWidget,其中用戶單擊“ENTER”按鈕,進入稱為 LoginScreenWidget 的第二個小部件,用戶在其中放置登錄信息並按下“LOGIN”按鈕,進入 MainApplicationScreen。 我嘗試使用 QStackedLayout 但它需要調整我的小部件的大小以移除設計和自定義。 下面是我的主要代碼:

import sys
from PyQt5 import QtWidgets, QtCore
from WelcomeWidget import WelcomeUi_Form
from LoginWidget import LoginUi_Form

class AppWelcome(QtWidgets.QWidget,WelcomeUi_Form):
    def __init__(self):
        super(AppWelcome,self).__init__()
        self.setupUi(self)

class AppLogin(QtWidgets.QWidget,LoginUi_Form):
   def __init__(self):
        super(AppLogin,self).__init__()
        self.setupUi(self)

if __name__=="__main__":
    app = QtWidgets.QApplication(sys.argv)
    Form = AppWelcome()
    Form.show()
    sys.exit(app.exec_())

所以我想要 Flow 的方式是:WelcomeWidget(AppWelcome)->LoginWidget(AppLogin) 我想保留我的設計,因為使用 QStackedWidget 會顯示標題欄以及我的小部件內置的所有常規選項。 任何解決方法。 還附上一張小部件圖片以供參考,所以知道我在說什么。 我將如何做? 在此處輸入圖像描述

我相信這段代碼可以幫助你:

import sys
from PyQt5 import QtWidgets, QtCore
# from WelcomeWidget import WelcomeUi_Form
# from LoginWidget import LoginUi_Form

class AppWelcome(QtWidgets.QWidget):
    def __init__(self):
        super(AppWelcome,self).__init__()
        # self.setupUi(self)
        self.enter_button = QtWidgets.QPushButton("Enter", self)
        self.lbl_1 = QtWidgets.QLabel("AppWelcome", self)

        v_box = QtWidgets.QVBoxLayout()
        v_box.addWidget(self.lbl_1)
        v_box.addWidget(self.enter_button)
        self.setLayout(v_box)
        self.enter_button.clicked.connect(self.go_to_login)

    def go_to_login(self):
        Form.setCurrentIndex(Form.currentIndex()+1)

class AppLogin(QtWidgets.QWidget):
    def __init__(self):
        super(AppLogin,self).__init__()
        # self.setupUi(self)
        self.login_button = QtWidgets.QPushButton("Login", self)

        self.lbl_2 = QtWidgets.QLabel("AppLogin", self)

        v_box2 = QtWidgets.QVBoxLayout()
        v_box2.addWidget(self.lbl_2)
        v_box2.addWidget(self.login_button)
        self.setLayout(v_box2)
        self.login_button.clicked.connect(self.go_to_main)

    def go_to_main(self):
        Form.setCurrentIndex(Form.currentIndex()+1)

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        # self.setupUi(self)

        widget = QtWidgets.QLabel()
        
        widget.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)

        self.setCentralWidget(widget)
        self.setStyleSheet(
            "background-color: none"
        )
        
        self.initUI()
    
    def initUI(self):
        self.lbl_3 = QtWidgets.QLabel("MainWindow", self)
        v_box3 = QtWidgets.QVBoxLayout()
        v_box3.addWidget(self.lbl_3)
        self.setLayout(v_box3)

if __name__=="__main__":
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QStackedWidget()
    welcome_window = AppWelcome()
    app_login_window = AppLogin()
    main_window = MainWindow()
    Form.addWidget(welcome_window)
    Form.addWidget(app_login_window)
    Form.addWidget(main_window)
    Form.setFixedSize(400, 600)
    Form.show()
    sys.exit(app.exec_())

在此處輸入圖像描述

如果您的表單大小不同,則不需要 QStackWidget,因此您可以使用以下代碼:

import sys
from PyQt5 import QtWidgets, QtCore
# from WelcomeWidget import WelcomeUi_Form
# from LoginWidget import LoginUi_Form

class AppWelcome(QtWidgets.QWidget):
    def __init__(self):
        super(AppWelcome,self).__init__()
        self.setFixedSize(100, 600)
        # self.setupUi(self)
        self.enter_button = QtWidgets.QPushButton("Enter", self)
        self.lbl_1 = QtWidgets.QLabel("AppWelcome", self)

        v_box = QtWidgets.QVBoxLayout()
        v_box.addWidget(self.lbl_1)
        v_box.addWidget(self.enter_button)
        self.setLayout(v_box)
        self.enter_button.clicked.connect(self.go_to_login)

    def go_to_login(self):
        # Form.setCurrentIndex(Form.currentIndex()+1)
        welcome_window.close()
        app_login_window.show()

class AppLogin(QtWidgets.QWidget):
    def __init__(self):
        super(AppLogin,self).__init__()
        self.setFixedSize(300, 300)
        # self.setupUi(self)
        self.login_button = QtWidgets.QPushButton("Login", self)

        self.lbl_2 = QtWidgets.QLabel("AppLogin", self)

        v_box2 = QtWidgets.QVBoxLayout()
        v_box2.addWidget(self.lbl_2)
        v_box2.addWidget(self.login_button)
        self.setLayout(v_box2)
        self.login_button.clicked.connect(self.go_to_main)

    def go_to_main(self):
        # Form.setCurrentIndex(Form.currentIndex()+1)
        app_login_window.close()
        main_window.show()

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setFixedSize(700, 700)
        # self.setupUi(self)

        widget = QtWidgets.QLabel()
        
        widget.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)

        self.setCentralWidget(widget)
        self.setStyleSheet(
            "background-color: none"
        )
        
        self.initUI()
    
    def initUI(self):
        self.lbl_3 = QtWidgets.QLabel("MainWindow", self)
        v_box3 = QtWidgets.QVBoxLayout()
        v_box3.addWidget(self.lbl_3)
        self.setLayout(v_box3)

if __name__=="__main__":
    app = QtWidgets.QApplication(sys.argv)
    welcome_window = AppWelcome()
    app_login_window = AppLogin()
    main_window = MainWindow()
    welcome_window.show()
    sys.exit(app.exec_())

在此處輸入圖像描述

暫無
暫無

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

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