使用三个.py文件。分别为zhu.py, ci_one.py, ci_two.py。

基本思路:

运行zhu.py产生一个窗口,窗口内有一个按键。按下后,打开其他两个文件产生的窗口。

先打开QT designed图形窗口设计器。设计好窗口。

最简单的设计器窗口转.py文件。

窗口:

.py文件代码:(setupUi方法用于初始化窗口)

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):            # 初始化方法--初始化窗口设置
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1000, 600)          # 窗口大小

        # 子窗口--添加控件
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")    # 绑定属性

        MainWindow.setCentralWidget(self.centralwidget)
        # 菜单栏
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1000, 26))    # 菜单栏位置和大小
        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", "标题栏"))

 启动的主程序为:

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()    # 创建窗体类对象MainWindow
    ui = Ui_MainWindow()                    # 创建PyQT设计的窗体对象
    ui.setupUi(MainWindow)                  # 初始化MainWindow窗口设置
    MainWindow.show()                       # 显示窗口
    sys.exit(app.exec_())

1. 改变zhu.py

在zhu.py中,设置一个新的方法:click_open()。

 def open(self):
        import ci_one, ci_two

        self.one = ci_one.Ui_MainWindow()    # 初始化ci_one.py的窗口设置
        self.one.show()                      # 显示该窗口

        self.two = ci_two.Ui_MainWindow()
        self.two.show()

然后对zhu.py的按钮,绑定该方法!

self.pushButton = QtWidgets.QPushButton(self.centralwidget)    # 设置父窗口
self.pushButton.setGeometry(QtCore.QRect(200, 150, 93, 28))    # 设置按钮位置和大小
                                        # 前两个参数为位置,后两个参数为大小
    
self.pushButton.setObjectName("pushButton") # 绑定控件类型
self.pushButton.clicked.connect(self.open)  # (绑定)调用open实例方法--用来打开其他窗口

2. 改变其他的.py文件

用Qt的图形窗口设计器转换过来的.py文件都会有Ui_MainWindow类。

class Ui_MainWindow(object):

我们需要修改,让他继承QtWidgets.QMainWindow类。

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow


class Ui_MainWindow(QMainWindow):

但只是继承的话,虽然已经可以显示窗口,窗口没有任何东西,并没有接受我们的初始化。

所以还需要进行一点改动。

继承并改动它的构造方法__init__()

    def __init__(self):    # 构造方法
        super().__init__()    # 继承XX类的构造方法
        self.setupUi(self)    # 初始化本窗口

说明完毕。

直接上代码:

zhu.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(550, 400)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(200, 150, 93, 28))
        self.pushButton.setObjectName("pushButton")

        MainWindow.setCentralWidget(self.centralwidget)


        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 550, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        self.pushButton.clicked.connect(self.open)  # 调用open实例方法--用来打开其他窗口
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "打开其他窗口"))

    def open(self):
        import ci_one, ci_two

        self.one = ci_one.Ui_MainWindow()
        self.one.show()

        self.two = ci_two.Ui_MainWindow()
        self.two.show()


import sys
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()    # 创建窗体类对象--窗口类型对象
    ui = Ui_MainWindow()                    # 创建PyQT设计的窗体对象--该类用于初始化任何类型的窗口设置
    ui.setupUi(MainWindow)                  # 初始化MainWindow窗口设置
    MainWindow.show()                       # 显示窗口
    sys.exit(app.exec_())

ci_one.py:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow


class Ui_MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)


    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(550, 400)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 550, 26))
        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", "MainWindow1"))

ci_two.py

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow


class Ui_MainWindow(QMainWindow):   # 本来class Ui_MainWindow的实例是不能随意使用的,但因为继承了,就可以使用了
    def __init__(self):
        super(Ui_MainWindow, self).__init__()
        # super().__init__()
        self.setupUi(self)
        print(type(self))

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(550, 400)
        self.centralwidget = QtWidgets.QWidget(MainWindow)  # 给Qwidget设置父窗口
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton1 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton1.setGeometry(QtCore.QRect(120, 80, 93, 28))     # 前两个参数是位置,后两个参数是按钮大小
        self.pushButton1.setObjectName("pushButton")

        self.pushButton2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton2.setGeometry(QtCore.QRect(120, 130, 93, 28))
        self.pushButton2.setObjectName("pushButton")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 550, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)


        self.pushButton2.clicked.connect(MainWindow.close)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow2"))
        self.pushButton1.setText(_translate("MainWindow", "ci-2"))
        self.pushButton2.setText(_translate("MainWindow", "退出"))

窗口演示:

点击“打开其他窗口”按钮后

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐