PyQt 開啟子視窗
阿新 • • 發佈:2018-12-19
先上圖
視窗函式使用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_())