PyQt4 + QT designer实现多窗口调用及其程序原理

梦里梦外; 2021-12-21 13:41 735阅读 0赞

1 多窗口调用实现的功能

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ4MzM4MQ_size_16_color_FFFFFF_t_70

为了统一窗口,采用MainWindow作为窗口的类型,即上图所示5个窗口均为MainWindow

2 使用QT designer搭建用到的界面

首先第一步利用PyQt4中自带的QT designer搭建各个窗口,并使用PYUIC生成各个窗口的python文件(.py),各个窗口的搭建界面如下图所示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ4MzM4MQ_size_16_color_FFFFFF_t_70 1

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ4MzM4MQ_size_16_color_FFFFFF_t_70 2

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ4MzM4MQ_size_16_color_FFFFFF_t_70 3

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ4MzM4MQ_size_16_color_FFFFFF_t_70 4

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ4MzM4MQ_size_16_color_FFFFFF_t_70 5

3 编写主调用函数

在使用QT designer搭建完五个界面并生成完五个.py文件后,编写一个主界面函数来实现上述的调用关系。其中,自动生成的文件中有两处需要修改,1是将每个文件中class括号里的继承类由Object改为QMainWindow,2是将每个文件的class类名修改成不一样的,在这里修改成了main_MainWindow,subone_MainWindow ,subtwo_MainWindow,table_MainWindow,train_MainWindow。

  1. from PyQt4 import QtCore, QtGui
  2. import sys
  3. # 以下五个文件为pyuic生成的.py文件,注意修改里面类的名字不要重复
  4. from sub_window_one import subone_MainWindow
  5. from sub_window_two import subtwo_MainWindow
  6. from main_window import main_MainWindow
  7. from table_window import table_MainWindow
  8. from train_window import train_MainWindow
  9. class Mywindow1(QtGui.QMainWindow):
  10. def __init__(self):
  11. super(Mywindow1, self).__init__()
  12. self.ui = subone_MainWindow() # 这句话是实例化类
  13. self.ui.setupUi(self) # 这句话相当于设置控件
  14. def open(self): # 被调用的类需要再编写一个open函数
  15. self.show()
  16. class Mywindow2(QtGui.QMainWindow):
  17. def __init__(self):
  18. super(Mywindow2, self).__init__()
  19. self.ui = subtwo_MainWindow()
  20. self.ui.setupUi(self)
  21. def open(self): # 被调用的类需要再编写一个open函数
  22. self.show()
  23. class Mywindow3(QtGui.QMainWindow):
  24. def __init__(self):
  25. super(Mywindow3, self).__init__()
  26. self.ui = main_MainWindow()
  27. self.ui.setupUi(self)
  28. class Mywindow4(QtGui.QMainWindow):
  29. def __init__(self):
  30. super(Mywindow4, self).__init__()
  31. self.ui = table_MainWindow()
  32. self.ui.setupUi(self)
  33. def open(self): # 被调用的类需要再编写一个open函数
  34. self.show()
  35. class Mywindow5(QtGui.QMainWindow):
  36. def __init__(self):
  37. super(Mywindow5, self).__init__()
  38. self.ui = train_MainWindow()
  39. self.ui.setupUi(self)
  40. def open(self): # 被调用的类需要再编写一个open函数
  41. self.show()
  42. if __name__ == "__main__":
  43. app = QtGui.QApplication(sys.argv)
  44. # 实例化各个类
  45. w1 = Mywindow1()
  46. w2 = Mywindow2()
  47. w3 = Mywindow3()
  48. w4 = Mywindow4()
  49. w5 = Mywindow5()
  50. # 将主窗口进行展示调用
  51. w3.show()
  52. # 主窗口与子窗口1,2使用connect方法连接起来
  53. w3.ui.pushButton.clicked.connect(w2.open)
  54. w3.ui.pushButton_2.clicked.connect(w1.open)
  55. # 子窗口1与子窗口1-1使用connect方法连接起来
  56. w1.ui.pushButton_4.clicked.connect(w4.open)
  57. # 子窗口2与子窗口2-1使用connect方法连接起来
  58. w2.ui.pushButton_4.clicked.connect(w5.open)
  59. sys.exit(app.exec_())

由于篇幅限制,另外5个自动生成的文件就不在此进行展示了,需要完整模板的读者可以去我的资源进行整套的下载,环境为python3.7 + PyQt4, 无运行bug。

4 一句话看懂窗口调用原理

使用QT designer生成的文件,需要先实例化其类,再调用setupUi(self)方法,再调用.show()方法即可将窗口调用出来,即三行指令实现QT designer自动生成文件的窗口调用,因次可以灵活配置其调用关系。

发表评论

表情:
评论列表 (有 0 条评论,735人围观)

还没有评论,来说两句吧...

相关阅读