1. 程式人生 > >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_())