1 多窗口调用实现的功能
为了统一窗口,采用MainWindow作为窗口的类型,即上图所示5个窗口均为MainWindow
2 使用QT designer搭建用到的界面
首先第一步利用PyQt4中自带的QT designer搭建各个窗口,并使用PYUIC生成各个窗口的python文件(.py),各个窗口的搭建界面如下图所示:
3 编写主调用函数
在使用QT designer搭建完五个界面并生成完五个.py文件后,编写一个主界面函数来实现上述的调用关系。其中,自动生成的文件中有两处需要修改,1是将每个文件中class括号里的继承类由Object改为QMainWindow,2是将每个文件的class类名修改成不一样的,在这里修改成了main_MainWindow,subone_MainWindow ,subtwo_MainWindow,table_MainWindow,train_MainWindow。
from PyQt4 import QtCore, QtGui
import sys
# 以下五个文件为pyuic生成的.py文件,注意修改里面类的名字不要重复
from sub_window_one import subone_MainWindow
from sub_window_two import subtwo_MainWindow
from main_window import main_MainWindow
from table_window import table_MainWindow
from train_window import train_MainWindow
class Mywindow1(QtGui.QMainWindow):
def __init__(self):
super(Mywindow1, self).__init__()
self.ui = subone_MainWindow() # 这句话是实例化类
self.ui.setupUi(self) # 这句话相当于设置控件
def open(self): # 被调用的类需要再编写一个open函数
self.show()
class Mywindow2(QtGui.QMainWindow):
def __init__(self):
super(Mywindow2, self).__init__()
self.ui = subtwo_MainWindow()
self.ui.setupUi(self)
def open(self): # 被调用的类需要再编写一个open函数
self.show()
class Mywindow3(QtGui.QMainWindow):
def __init__(self):
super(Mywindow3, self).__init__()
self.ui = main_MainWindow()
self.ui.setupUi(self)
class Mywindow4(QtGui.QMainWindow):
def __init__(self):
super(Mywindow4, self).__init__()
self.ui = table_MainWindow()
self.ui.setupUi(self)
def open(self): # 被调用的类需要再编写一个open函数
self.show()
class Mywindow5(QtGui.QMainWindow):
def __init__(self):
super(Mywindow5, self).__init__()
self.ui = train_MainWindow()
self.ui.setupUi(self)
def open(self): # 被调用的类需要再编写一个open函数
self.show()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
# 实例化各个类
w1 = Mywindow1()
w2 = Mywindow2()
w3 = Mywindow3()
w4 = Mywindow4()
w5 = Mywindow5()
# 将主窗口进行展示调用
w3.show()
# 主窗口与子窗口1,2使用connect方法连接起来
w3.ui.pushButton.clicked.connect(w2.open)
w3.ui.pushButton_2.clicked.connect(w1.open)
# 子窗口1与子窗口1-1使用connect方法连接起来
w1.ui.pushButton_4.clicked.connect(w4.open)
# 子窗口2与子窗口2-1使用connect方法连接起来
w2.ui.pushButton_4.clicked.connect(w5.open)
sys.exit(app.exec_())
由于篇幅限制,另外5个自动生成的文件就不在此进行展示了,需要完整模板的读者可以去我的资源进行整套的下载,环境为python3.7 + PyQt4, 无运行bug。
4 一句话看懂窗口调用原理
使用QT designer生成的文件,需要先实例化其类,再调用setupUi(self)方法,再调用.show()方法即可将窗口调用出来,即三行指令实现QT designer自动生成文件的窗口调用,因次可以灵活配置其调用关系。