您好,登錄后才能下訂單哦!
前言
之前做過pyqt的一個簡單界面,在一個窗口(MainWindow)中實現一些操作;之前嫌麻煩沒有去做多窗口和它們的切換功能。最近研究了下窗口的調用和切換。
pyqt4和5有很多不同,在參考別人案例的時候走了很多彎路,最后在pyqt5下實現了簡潔的多窗口切換為大家參考。
思路
多窗口的切換和顯示連接到按鈕的信號上再進行show()就行,格式上有別于pyqt4。
一個邏輯比較清晰的解決方案是,使用一個主程序,在其中實例化各個窗口,然后定義它們的顯示邏輯即是按鈕的槽函數。
格式上稍有不對就會報錯,也是讓我重新審視了一下python類和繼承的語法= =
同時窗口的類型也和pyqt4有所不同,pyqt5下QWidgets為主,與4中QDialog顯示方式也有所不同。
具體方式見代碼。
代碼
主程序——實例化各個窗口
from PyQt5 import QtCore, QtGui, QtWidgets from test import Ui_Dialog from Login import Ui_MainWindow_Login class Ui_Dialog(QtWidgets.QWidget,Ui_Dialog): def __init__(self): super(Ui_Dialog,self).__init__() self.setupUi(self) #定義登出按鈕的功能 def logoutEvent(self): self.hide() #隱藏此窗口 self.log = loginWindow() self.log.show() #顯示登錄窗口 #必須加上self class loginWindow(QtWidgets.QMainWindow,Ui_MainWindow_Login): def __init__(self): super(loginWindow,self).__init__() self.setupUi(self) #定義登錄按鈕的功能 def loginEvent(self): self.hide() self.dia = Ui_Dialog() self.dia.show() #self.dia.exec_() #pyqt5下show()方法有所改變,不再使用exec_()方法。 #運行窗口Login if __name__=="__main__": import sys app=QtWidgets.QApplication(sys.argv) login_show=loginWindow() login_show.show() sys.exit(app.exec_())
多窗口
需要用到的多個窗口可以用Designer直接生成,主窗口實例化。在其中定義好信號連接即可
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow_Login(object): def setupUi(self, MainWindow_Login): #略 def retranslateUi(self, MainWindow_Login): #略 if __name__=="__main__": import sys app=QtWidgets.QApplication(sys.argv) widget = QtWidgets.QMainWindow() login = Ui_MainWindow_Login() login.setupUi(widget) widget.show() sys.exit(app.exec_())
效果
點擊登陸:
退出登錄則返回到第一個窗口。
切換
理解好這個實例后,添加更多窗口都是線性復雜度的操作,在Designer中設計好窗口,直接轉碼后就可在主程序中實例化該窗口并設計它們的顯示邏輯。
以上這篇PyQt5 多窗口連接實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。