* 在编程开发中,一个程序不可避免的需要多窗口操作来实现具体的功能。
实现此功能的基本步骤(以三个窗口为例,使用主窗口调用其它两个窗口)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# 主窗口 from pyqt5 import qtcore, qtgui, qtwidgets class ui_mainwindow( object ): def setupui( self , mainwindow): mainwindow.setobjectname( "mainwindow" ) mainwindow.resize( 800 , 600 ) self .centralwidget = qtwidgets.qwidget(mainwindow) self .centralwidget.setobjectname( "centralwidget" ) self .pushbutton = qtwidgets.qpushbutton( self .centralwidget) self .pushbutton.setgeometry(qtcore.qrect( 70 , 180 , 75 , 23 )) self .pushbutton.setobjectname( "pushbutton" ) self .pushbutton_2 = qtwidgets.qpushbutton( self .centralwidget) self .pushbutton_2.setgeometry(qtcore.qrect( 250 , 180 , 75 , 23 )) self .pushbutton_2.setobjectname( "pushbutton_2" ) mainwindow.setcentralwidget( self .centralwidget) self .menubar = qtwidgets.qmenubar(mainwindow) self .menubar.setgeometry(qtcore.qrect( 0 , 0 , 800 , 23 )) self .menubar.setobjectname( "menubar" ) mainwindow.setmenubar( self .menubar) self .statusbar = qtwidgets.qstatusbar(mainwindow) self .statusbar.setobjectname( "statusbar" ) mainwindow.setstatusbar( self .statusbar) self .retranslateui(mainwindow) qtcore.qmetaobject.connectslotsbyname(mainwindow) def retranslateui( self , mainwindow): _translate = qtcore.qcoreapplication.translate mainwindow.setwindowtitle(_translate( "mainwindow" , "mainwindow" )) self .pushbutton.settext(_translate( "mainwindow" , "打开窗口1" )) self .pushbutton_2.settext(_translate( "mainwindow" , "打开窗口2 " )) # 窗口1 class ui_dialog( object ): def setupui( self , dialog): dialog.setobjectname( "dialog" ) dialog.resize( 400 , 300 ) self .buttonbox = qtwidgets.qdialogbuttonbox(dialog) self .buttonbox.setgeometry(qtcore.qrect( 30 , 240 , 341 , 32 )) self .buttonbox.setorientation(qtcore.qt.horizontal) self .buttonbox.setstandardbuttons(qtwidgets.qdialogbuttonbox.cancel|qtwidgets.qdialogbuttonbox.ok) self .buttonbox.setobjectname( "buttonbox" ) self .label = qtwidgets.qlabel(dialog) self .label.setgeometry(qtcore.qrect( 140 , 100 , 54 , 12 )) self .label.setobjectname( "label" ) self .retranslateui(dialog) self .buttonbox.accepted.connect(dialog.accept) self .buttonbox.rejected.connect(dialog.reject) qtcore.qmetaobject.connectslotsbyname(dialog) def retranslateui( self , dialog): _translate = qtcore.qcoreapplication.translate dialog.setwindowtitle(_translate( "dialog" , "dialog" )) self .label.settext(_translate( "dialog" , "这是窗口1" )) # 窗口2 class ui_form( object ): def setupui( self , form): form.setobjectname( "form" ) form.resize( 400 , 300 ) self .label = qtwidgets.qlabel(form) self .label.setgeometry(qtcore.qrect( 140 , 140 , 54 , 12 )) self .label.setobjectname( "label" ) self .retranslateui(form) qtcore.qmetaobject.connectslotsbyname(form) def retranslateui( self , form): _translate = qtcore.qcoreapplication.translate form.setwindowtitle(_translate( "form" , "form" )) self .label.settext(_translate( "form" , "这是窗口2" )) |
主程序入口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 主程序 class mainwindow(qmainwindow, untitled.ui_mainwindow): def __init__( self ): super (mainwindow, self ).__init__() self .setupui( self ) self .window2 = ui_dialog() self .window2.setupui() self .window3 = ui_form() self .window3.setupui() self .pushbutton.clicked.connect( self .window2.show) # 绑定窗口2 self .pushbutton_2.clicked.connect( self .window3.show) # 绑定窗口3 if __name__ = = '__main__' : app = qapplication(sys.argv) mainwindow = mainwindow() mainwindow.show() sys.exit(app.exec_()) |
以上实现主窗口通过按钮弹出窗口1和窗口2
下面实现通过窗口按钮打开文件资源管理器,实现获取文件相关信息的功能:
1. 在主窗口中添加一个按钮:
1
2
3
4
5
6
7
8
9
|
class ui_mainwindow( object ): def setupui( self , mainwindow): ...... self .pushbutton_3 = qtwidgets.qpushbutton( self .centralwidget) self .pushbutton_3.setgeometry(qtcore.qrect( 420 , 180 , 75 , 23 )) self .pushbutton_3.setobjectname( "pushbutton_3" ) def retranslateui( self , mainwindow): ...... self .pushbutton_3.settext(_translate( "mainwindow" , "打开目录" )) |
2.主程序中添加:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# 主程序 class mainwindow(qmainwindow, untitled.ui_mainwindow): def __init__( self ): super (mainwindow, self ).__init__() self .setupui( self ) self .window2 = ui_dialog() self .window2.setupui() self .window3 = ui_form() self .window3.setupui() self .pushbutton.clicked.connect( self .window2.show) # 绑定窗口2 self .pushbutton_2.clicked.connect( self .window3.show) # 绑定窗口3 self .pushbutton_3.clicked.connect( self .gefilename) # 新增加的 # 新增加的 def gefilename( self ): filename = qfiledialog.getopenfilename() return filename if __name__ = = '__main__' : app = qapplication(sys.argv) mainwindow = mainwindow() mainwindow.show() sys.exit(app.exec_()) |
即可完成上述功能。
以上这篇pyqt 多窗口之间的相互调用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/huolan__34/article/details/81541308