PyQt 打开子窗口

先上图

PyQt 打开子窗口

窗口函数使用Designer生成

A窗口代码

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Form_A.ui'
#
# Created by: PyQt5 UI code generator 5.11.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form1(object):
    def setupUi(self, Form1):
        Form1.setObjectName("Form1")
        Form1.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(Form1)
        self.centralwidget.setObjectName("centralwidget")
        self.A_bt1 = QtWidgets.QPushButton(self.centralwidget)
        self.A_bt1.setGeometry(QtCore.QRect(330, 190, 75, 23))
        self.A_bt1.setObjectName("A_bt1")
        self.A_l1 = QtWidgets.QLabel(self.centralwidget)
        self.A_l1.setGeometry(QtCore.QRect(350, 80, 54, 12))
        self.A_l1.setObjectName("A_l1")
        Form1.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(Form1)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 17))
        self.menubar.setObjectName("menubar")
        Form1.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(Form1)
        self.statusbar.setObjectName("statusbar")
        Form1.setStatusBar(self.statusbar)

        self.retranslateUi(Form1)
        QtCore.QMetaObject.connectSlotsByName(Form1)

    def retranslateUi(self, Form1):
        _translate = QtCore.QCoreApplication.translate
        Form1.setWindowTitle(_translate("Form1", "MainWindow"))
        self.A_bt1.setText(_translate("Form1", "打开B窗口"))
        self.A_l1.setText(_translate("Form1", "A窗口"))

B窗口代码

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Form_B.ui'
#
# Created by: PyQt5 UI code generator 5.11.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form2(object):
    def setupUi(self, Form2):
        Form2.setObjectName("Form2")
        Form2.resize(400, 300)
        self.B_l1 = QtWidgets.QLabel(Form2)
        self.B_l1.setGeometry(QtCore.QRect(160, 90, 54, 12))
        self.B_l1.setObjectName("B_l1")
        self.B_bt1 = QtWidgets.QPushButton(Form2)
        self.B_bt1.setGeometry(QtCore.QRect(320, 270, 75, 23))
        self.B_bt1.setObjectName("B_bt1")

        self.retranslateUi(Form2)
        QtCore.QMetaObject.connectSlotsByName(Form2)

    def retranslateUi(self, Form2):
        _translate = QtCore.QCoreApplication.translate
        Form2.setWindowTitle(_translate("Form2", "Form"))
        self.B_l1.setText(_translate("Form2", "B窗口"))
        self.B_bt1.setText(_translate("Form2", "关闭窗口"))

 

调用函数代码

# -*- coding: utf-8 -*-
import sys

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

from Form_A import Ui_Form1 #这个是main   主窗口
from Form_B import Ui_Form2 #这个是widget 子窗口

class MyMain(QMainWindow,Ui_Form1): #继承主窗口函数的类, 继承编写的主函数
    def __init__(self):
        super().__init__()
        self.setupUi(self)  # 初始化运行A窗口类下的 setupUi 函数
        

class widget(QWidget,Ui_Form2):
    def __init__(self):
        super().__init__()
        self.setupUi(self)  # 初始化运行B窗口类下的 setupUi 函数
        self.B_bt1.clicked.connect(self.close) #窗口2 中的关闭按钮

 
        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    A1 = MyMain()
    B1 = widget()
    A1.A_bt1.clicked.connect(B1.show) #窗口1的打开窗口按钮
    
    A1.show()
    sys.exit(app.exec_())