pyqt 多窗口之间的相互调用方法

时间:2022-11-28 18:47:29

* 在编程开发中,一个程序不可避免的需要多窗口操作来实现具体的功能。

实现此功能的基本步骤(以三个窗口为例,使用主窗口调用其它两个窗口)

?
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