[英]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.