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

1 多窗口调用实现的功能

PyQt4 + QT designer实现多窗口调用及其程序原理_第1张图片

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

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

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

PyQt4 + QT designer实现多窗口调用及其程序原理_第2张图片
PyQt4 + QT designer实现多窗口调用及其程序原理_第3张图片
PyQt4 + QT designer实现多窗口调用及其程序原理_第4张图片
PyQt4 + QT designer实现多窗口调用及其程序原理_第5张图片
PyQt4 + QT designer实现多窗口调用及其程序原理_第6张图片

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自动生成文件的窗口调用,因次可以灵活配置其调用关系。

你可能感兴趣的:(PyQt4)