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_())