PyQt5之多文档界面
多文档界面应用程序占用较少的内存资源,子窗口都可以放在主窗口容器中,这个容器控件被称为QMdiArea。QMdiArea控件通常占据在QMainWindow对象的中央位置,可以设置任何QWidget作为子窗口对象的内部控件。
一、QMdiArea和QMdiSubWindow类中的常用方法
方法 | 描述 |
---|---|
addSubWindow() | 将一个小控件添加在MDI区域作为一个新的子窗口 |
removeSubWindow() | 删除一个子窗口中的小控件 |
setActiveSubWindow() | 激活一个子窗口 |
cascadeSubWindows() | 安排子窗口在MDI区域级联显示 |
tileSubWindows() | 安排子窗口在MDI区域平铺显示 |
closeActiveSubWindow() | 关闭活动的子窗口 |
subWindowList() | 返回MDI区域的子窗口列表 |
setWidget() | 设置一个小控件作为QMdiSubWindow实例对象的内部控件 |
二、多重文档界面
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Demo(QMainWindow):
count = 0
def __init__(self):
super().__init__()
self.setGeometry(100, 50, 500, 400)
self.setWindowTitle('多文档界面')
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)
def windowaction(self,q):
if q.text() == 'New':
Demo.count = Demo.count+1
sub = QMdiSubWindow()
sub.setWidget(QTextEdit())
sub.setWindowTitle('subwindow' + str(Demo.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)
form = Demo()
form.show()
sys.exit(app.exec_())
运行效果如下: