写点什么

Python Qt GUI 设计:QMdiArea 和 QMdiSubWindow 类实现多文档界面(拓展篇—3)

  • 2021 年 12 月 13 日
  • 本文字数:1051 字

    阅读完需:约 3 分钟

Python Qt GUI设计:QMdiArea和QMdiSubWindow类实现多文档界面(拓展篇—3)

一个典型的 GUI 应用程序可能有多个窗口,选项卡控件和堆栈窗口控件允许一次使用其中的一个窗口。然而,很多时候这种方法不是很有用,因为其他窗口的视图是隐藏的一种同时显示多个窗口的方法是,创建多个独立的窗口,这些独立的窗口被称为 SDI(Single Document Interface,单文档界面),每个窗口都可以有自己的菜单系统、工具栏等。这需要占用较多的内存资源。MDI (Multiple Document Interface,多文档界面)应用程序占用较少的内存资源,子窗口都可以放在主窗口容器中,这个容器控件被称为 QMdiArea。QMidArea 控件通常占据在 QMainWindow 对象的中央位置,子窗口在这个区域是 QMdiSubWindow 类的实例,可以设置任何 QWidget 作为子窗口对象的内部控件,子窗口在 MDI 区域进行级联排列布局。QMdiArea 类和 QMdiSubWindow 类中的常用方法如下表所示:


通过示例,了解 QMdiArea 类和 QMdiSubWindow 类多文档界面的使用方法,效果如下所示:


示例中,主窗口 QMainWindow 拥有一个菜单控件和 MidArea 控件。当单击菜单控件时触发 triggered 信号,连接到槽函数 windowaction()。当选择菜单中的“New"动作时,会添加一个新的 MDI,每个 MDI 都有标题,在主窗口内部会增加 MDI 的数量。当选择菜单中的“cascade"和"Tiled"动作时,会在主窗口中显示子窗口的排列方式:级联显示子窗口或平铺显示子窗口。实现代码如下所示:

import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *            class MainWindow(QMainWindow):	count=0	def __init__(self, parent=None):		super(MainWindow, self).__init__(parent)		self.mdi = QMdiArea()		self.setCentralWidget(self.mdi)		bar=self.menuBar()		file=bar.addMenu("File")		file.addAction("New")		file.addAction("cascade")		file.addAction("Tiled")		file.triggered[QAction].connect(self.windowaction)		self.setWindowTitle("MDI demo") 	def windowaction(self, q): 		print( "triggered")				if q.text()=="New":			MainWindow.count=MainWindow.count+1			sub=QMdiSubWindow()			sub.setWidget(QTextEdit())			sub.setWindowTitle("subwindow"+str(MainWindow.count))			self.mdi.addSubWindow(sub)			sub.show()		if q.text()=="cascade":			self.mdi.cascadeSubWindows()		if q.text()=="Tiled":			self.mdi.tileSubWindows()             	if __name__ == '__main__':	app = QApplication(sys.argv)	demo = MainWindow()	demo.show()	sys.exit(app.exec_())
复制代码


发布于: 1 小时前阅读数: 6
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

【公众号】美男子玩编程,关注获取海量资源~

评论

发布
暂无评论
Python Qt GUI设计:QMdiArea和QMdiSubWindow类实现多文档界面(拓展篇—3)