前言
之前做過pyqt的一個簡單界面,在一個窗口(mainwindow)中實現一些操作;之前嫌麻煩沒有去做多窗口和它們的切換功能。最近研究了下窗口的調用和切換。
pyqt4和5有很多不同,在參考別人案例的時候走了很多彎路,最后在pyqt5下實現了簡潔的多窗口切換為大家參考。
思路
多窗口的切換和顯示連接到按鈕的信號上再進行show()就行,格式上有別于pyqt4。
一個邏輯比較清晰的解決方案是,使用一個主程序,在其中實例化各個窗口,然后定義它們的顯示邏輯即是按鈕的槽函數。
格式上稍有不對就會報錯,也是讓我重新審視了一下python類和繼承的語法= =
同時窗口的類型也和pyqt4有所不同,pyqt5下qwidgets為主,與4中qdialog顯示方式也有所不同。
具體方式見代碼。
代碼
主程序——實例化各個窗口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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直接生成,主窗口實例化。在其中定義好信號連接即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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 多窗口連接實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/EXECUTER_/article/details/78877159