PyQt布局基础:主窗体上添加多个子窗口

主窗体上添加多个子窗口

实现多文档界面(MDI)

效果

在这里插入图片描述

要点

QMdiArea
QMdiArea就像是多文档窗口的窗口管理器。例如,它将它所管理的窗口绘制在它上面,并且以级联或者平铺的方式放置这些窗口。通常情况下,QMdiArea用作QMainWindow的中心控件,以此来创建一个MDI应用程序。

QMdiSubWindow
QMdiArea中的子窗口是QMdiSubWindow的实例化对象。

代码

import sys  
from PyQt5.QtWidgets import *
from PyQt5.QtCore import * 
  
class MainWindow(QMainWindow):  
    def __init__(self):  
        super().__init__()  
  
        # 创建主窗口部件  
        self.setWindowTitle('Example')  
        self.setGeometry(100, 100, 400, 400)  
  
        self.mdi_area = QMdiArea()  
        self.setCentralWidget(self.mdi_area)   
  
        # 创建第一个子窗口,并设置其内容  
        self.subwindow1 = QMdiSubWindow()
        self.subwindow1.setWindowTitle('SubWindow 1')  
        widget1 = QWidget() 
        layout1 = QVBoxLayout()  
        label1 = QLabel('w1')  
        layout1.addWidget(label1)  
        widget1.setLayout(layout1)  
        self.subwindow1.setWidget(widget1)  
        self.mdi_area.addSubWindow(self.subwindow1)  

        subwindow1_width = 200 
        subwindow1_height = 400 
        self.subwindow1.resize(subwindow1_width, subwindow1_height)  
  
        # 创建第二个子窗口,并设置其内容  
        self.subwindow2 = QMdiSubWindow() 
        self.subwindow2.setWindowFlags(Qt.FramelessWindowHint)  
        # self.subwindow2.setWindowTitle('SubWindow 2')  
        widget2 = QWidget()  
        layout2 = QVBoxLayout()  
        label2 = QLabel('w2,这是一个无边框子窗口')  
        layout2.addWidget(label2)  
        widget2.setLayout(layout2)  
        self.subwindow2.setWidget(widget2)  
        self.mdi_area.addSubWindow(self.subwindow2)  
        subwindow2_width = 200
        subwindow2_height = 400 
        self.subwindow2.resize(subwindow2_width, subwindow2_height)  
 
  
if __name__ == '__main__':  
    app = QApplication(sys.argv)  
    window = MainWindow()  
    window.show()  
    sys.exit(app.exec_())
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用QProcess类来实现在mywindow窗口调出cmd窗口。具体实现代码如下: ``` import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog from PyQt5.QtCore import QProcess class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('调出cmd窗口') self.setGeometry(100, 100, 800, 600) # 创建菜单栏 menubar = self.menuBar() fileMenu = menubar.addMenu('文件') # 创建打开文件的操作 openFile = QAction('打开文件', self) openFile.triggered.connect(self.showFileDialog) fileMenu.addAction(openFile) # 创建调出cmd窗口的操作 openCmd = QAction('调出cmd窗口', self) openCmd.triggered.connect(self.showCmdWindow) fileMenu.addAction(openCmd) # 创建文本框 self.textEdit = QTextEdit() self.setCentralWidget(self.textEdit) def showFileDialog(self): options = QFileDialog.Options() fileName, _ = QFileDialog.getOpenFileName(self,"打开文件", "","All Files (*);;Text Files (*.txt)", options=options) if fileName: with open(fileName, 'r') as f: fileText = f.read() self.textEdit.setText(fileText) def showCmdWindow(self): # 创建一个QProcess对象 process = QProcess(self) # 设置进程程序和参数 process.start('cmd', []) # 将进程的输出重定向到窗口的文本框中 process.readyReadStandardOutput.connect(lambda: self.textEdit.append(str(process.readAllStandardOutput(), 'gbk'))) if __name__ == '__main__': app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) ``` 在代码中,我们创建了一个窗口,其中包含一个菜单栏和一个文本框。菜单栏中包含两个操作,一个是打开文件,一个是调出cmd窗口。当用户点击调出cmd窗口的操作时,我们创建了一个QProcess对象,并设置进程程序为cmd,参数为空。然后,我们将进程的输出重定向到窗口的文本框中,这样用户就可以在窗口中看到cmd窗口的输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值