你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

pyqt5窗口内嵌子窗口

2021/12/14 15:49:59

pyqt5窗口内嵌子窗口

1.示例图:
在这里插入图片描述
实现功能:
1.点击打开窗体实现子窗口内嵌主窗口展示
2.通过文件控件内的open控件导入文本内容在子窗口展示
3.通过文件控件内的close实现子窗口关闭

# -*- coding: utf-8 -*-
# Created by: PyQt5 UI code generator 5.6
# WARNING! All changes made in this file will be lost!
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget,QFileDialog

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(700,550)
        self.textEdit = QtWidgets.QTextEdit(Form)
        self.textEdit.setGeometry(QtCore.QRect(70, 50, 491, 281))
        self.textEdit.setObjectName("textEdit")
        self.textEdit.setStyleSheet("background-color:#FFFFFF;color: rgb(0,0,0);font: 15pt \"AcadEref\";")

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.textEdit.setText(_translate("Form", 'hello python'))

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(904, 621)
        MainWindow.setStyleSheet("background-color: rgb(40, 112, 107);\n"
                                      "color: rgb(255,255,255);  \n"
                                      "font: 15pt \"AcadEref\";\n"
                                      )
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(50, 10, 801, 511))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 904, 23))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        self.menu_2 = QtWidgets.QMenu(self.menubar)
        self.menu_2.setObjectName("menu_2")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.toolBar = QtWidgets.QToolBar(MainWindow)
        self.toolBar.setObjectName("toolBar")

        self.toolBar.setGeometry(QtCore.QRect(0, 20, 801, 31))
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
        self.actionOpen = QtWidgets.QAction(MainWindow)
        self.actionOpen.setObjectName("actionOpen")
        self.actionSave = QtWidgets.QAction(MainWindow)
        self.actionSave.setObjectName("actionSave")
        self.actionNew = QtWidgets.QAction(MainWindow)
        self.actionNew.setObjectName("actionNew")
        self.actionClose = QtWidgets.QAction(MainWindow)
        self.actionClose.setObjectName("actionClose")
        self.addWinAction = QtWidgets.QAction(MainWindow)
        self.addWinAction.setObjectName("addWinAction")
        self.menu.addAction(self.actionOpen)
        self.menu.addAction(self.actionSave)
        self.menu.addAction(self.actionNew)
        self.menu.addAction(self.actionClose)
        self.menubar.addAction(self.menu.menuAction())
        self.menubar.addAction(self.menu_2.menuAction())
        self.toolBar.addAction(self.addWinAction)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.menu.setTitle(_translate("MainWindow", "文件"))
        self.menu_2.setTitle(_translate("MainWindow", "编辑"))
        self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
        self.actionOpen.setText(_translate("MainWindow", "open"))
        self.actionOpen.setShortcut(_translate("MainWindow", "Alt+O"))
        self.actionSave.setText(_translate("MainWindow", "save"))
        self.actionNew.setText(_translate("MainWindow", "new"))
        self.actionClose.setText(_translate("MainWindow", "close"))
        self.addWinAction.setText(_translate("MainWindow", "打开窗体"))
        self.addWinAction.setToolTip(_translate("MainWindow", "addwin"))




class MainFrom(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(MainFrom,self).__init__()
        self.setupUi(self)
        self.child = ChildrenReom()
        self.actionOpen.triggered.connect(self.openMsg)
        self.addWinAction.triggered.connect(self.childShow)
        self.actionClose.triggered.connect(self.child_clearshow)

    def openMsg(self):
        try:
            file,ok =QFileDialog.getOpenFileName(self,"打开",'./')
            with open(file,'r') as f:
                file_text=f.read()
                self.child.textEdit.setText(file_text)
            print('filepath',file)
        except Exception as e:
            print('请选择文档',e)
    def childShow(self):
        self.gridLayout.addWidget(self.child)
        self.child.show()
    def child_clearshow(self):
        self.child.close()

class ChildrenReom(QMainWindow, Ui_Form):
    def __init__(self):
        super(ChildrenReom, self).__init__()
        self.setupUi(self)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mywindow = MainFrom()
    mywindow.show()
    sys.exit(app.exec_())