關於Pyqt窗口調用的格式 正常設計兩個ui文件 正常Pyuic轉成.py 在唯一的 run.py 函數里這樣寫即可實現窗口調用 import ... from Timer2 import Ui_Form # Timer2為主ui對於py文件的名字 from TimerSetup import Ui_Form as UISetup # Timer2為被調用窗口ui對於py文件的名字注意as,避免均為Ui_Form class MyPyQT_Form(QtWidgets.QWidget,Ui_Form): #主窗口的事件 # 下面這個方法自動執行,相當於初始化,但是可以自定義一個初始化函數 initUI() def __init__(self): super(MyPyQT_Form,self).__init__() self.setupUi(self) self.initUI() def initUI(self): pass def btn_click(self): ## 調用次窗口 self.mySetup = winSetup() self.mySetup.show() self.close def ... class winSetup(QtWidgets.QWidget, UISetup): def __init__ (self): super(winSetup, self).__init__() self.setupUi(self) self.initUI() def initUI(self): pass def ... if __name__ == '__main__': # 四句話:繼承-實例化-顯示-退出 app = QtWidgets.QApplication(sys.argv) main_form = MyPyQT_Form() #實例化,類的名字,可更改等號前面名字 MyPyQT_Form()繼承自Ui_Form main_form.show() sys.exit(app.exec_())
轉載:PyQt5 Demo 窗口跳轉
原作者:憤怒的軟綿綿
轉載僅是表達感謝與備份,學習建議查看文章出處
Demo 窗口跳轉
實現了一個簡單的登錄跳轉頁面。
登錄主窗口(.ui轉為.py):untitled.py
# untitled.py from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(399, 322) self.label_state = QtWidgets.QLabel(Dialog) self.label_state.setGeometry(QtCore.QRect(20, 290, 191, 16)) self.label_state.setObjectName("label_state") self.btn_ok = QtWidgets.QPushButton(Dialog) self.btn_ok.setGeometry(QtCore.QRect(80, 230, 75, 23)) self.btn_ok.setObjectName("btn_ok") self.btn_cancel = QtWidgets.QPushButton(Dialog) self.btn_cancel.setGeometry(QtCore.QRect(230, 230, 75, 23)) self.btn_cancel.setObjectName("btn_cancel") self.lineEdit_username = QtWidgets.QLineEdit(Dialog) self.lineEdit_username.setGeometry(QtCore.QRect(150, 50, 171, 20)) self.lineEdit_username.setObjectName("lineEdit_username") self.label_username = QtWidgets.QLabel(Dialog) self.label_username.setGeometry(QtCore.QRect(50, 50, 61, 16)) self.label_username.setObjectName("label_username") self.lineEdit_password = QtWidgets.QLineEdit(Dialog) self.lineEdit_password.setGeometry(QtCore.QRect(150, 90, 171, 20)) self.lineEdit_password.setInputMethodHints(QtCore.Qt.ImhHiddenText|QtCore.Qt.ImhNoAutoUppercase|QtCore.Qt.ImhNoPredictiveText|QtCore.Qt.ImhSensitiveData) self.lineEdit_password.setEchoMode(QtWidgets.QLineEdit.Password) self.lineEdit_password.setObjectName("lineEdit_password") self.label_password = QtWidgets.QLabel(Dialog) self.label_password.setGeometry(QtCore.QRect(50, 90, 61, 16)) self.label_password.setObjectName("label_password") self.retranslateUi(Dialog) self.btn_cancel.clicked.connect(Dialog.close) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.label_state.setText(_translate("Dialog", "TextLabel")) self.btn_ok.setText(_translate("Dialog", "ok")) self.btn_cancel.setText(_translate("Dialog", "cancel")) self.label_username.setText(_translate("Dialog", "User name")) self.label_password.setText(_translate("Dialog", "Password"))
登錄成功提示窗口(.ui轉為.py):information_ok.py
# information_ok.py from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(208, 122) self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(10, 10, 181, 71)) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.buttonBox = QtWidgets.QDialogButtonBox(Form) self.buttonBox.setGeometry(QtCore.QRect(0, 70, 171, 32)) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.retranslateUi(Form) self.buttonBox.clicked['QAbstractButton*'].connect(Form.close) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.label.setText(_translate("Form", "登錄成功!"))
登錄失敗提示窗口(.ui轉為.py):information_no.py
# information_no.py from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(208, 122) self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(10, 10, 181, 71)) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.buttonBox = QtWidgets.QDialogButtonBox(Form) self.buttonBox.setGeometry(QtCore.QRect(0, 70, 171, 32)) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.retranslateUi(Form) self.buttonBox.clicked['QAbstractButton*'].connect(Form.close) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.label.setText(_translate("Form", "登錄失敗!"))
主函數:run.py
# run.py from PyQt5 import QtWidgets from untitled import Ui_Dialog from information_ok import Ui_Form as form_ok from information_no import Ui_Form as form_no class mywindow(QtWidgets.QDialog, Ui_Dialog): def __init__ (self): super(mywindow, self).__init__() self.setupUi(self) self.btn_ok.clicked.connect(self.printState) def printState(self): #顯示狀態 # if self.lineEdit_username.text == "1" and self.lineEdit_password.text == "1": if self.lineEdit_username.text().strip() == "1" and self.lineEdit_password.text() == "1": words = "Login successful!" self.w1 = window_ok() self.w1.show() self.close() else: words = "Login faild!" self.w2 = window_no() self.w2.show() self.close() self.label_state.setText(words) class window_ok(QtWidgets.QWidget, form_ok): def __init__ (self): super(window_ok, self).__init__() self.setupUi(self) class window_no(QtWidgets.QWidget, form_no): def __init__ (self): super(window_no, self).__init__() self.setupUi(self) if __name__=="__main__": import sys app=QtWidgets.QApplication(sys.argv) ui = mywindow() ui.show() # input("input something") sys.exit(app.exec_())
注意
-
在主函數中記得實例化子窗體,否則無法實現跳轉;
-
窗體跳轉的調用需要用self,否則出現閃退.
#窗體跳轉調用時需加self self.w1 = window_ok() self.w1.show()
看到有大佬說,Dialog之間無法實現跳轉,親測是可以的,可能是實例化或者調用的時候沒有加self。
輸入密碼的模式設置:echoMode = Password
運行界面
存在的問題
在Spyder運行時,總是一次成功一次失敗,不知道這是為啥,求教各位大佬~
如果是運行.exe就沒有這個問題,好奇怪!
運行不成功的提示為:Kernel died, restarting