QMidArea 参考文章:https://blog.csdn.net/jia666666/article/details/81670569
一种同时显示多个窗口的方法,创建多个独立的窗口,这些独立的窗口被称为SDI(single document interface 单文档界面),每个窗口都有自己的菜单系统,工具栏等,这需要占用很多资源。
MDI( multiple document interface 多文档界面)应用程序占用较少的内存资源,子窗口可以放在主窗口的容器中,这个容器空间被称为QMidArea
QMidArea 空间通常占据在QMainWindow对象的中央位置,子窗口在这个区域是QMidSubWindow类的实例,可以设置任何QWidget作为子窗口对象的内部控件,子窗口在MDI区域进行级联排列布局
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QMdiArea,QMdiSubWindow,QLabel
class MidArea(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle(\'demo\')
self.setGeometry(300,300,300,200)
bar=self.menuBar()
file=bar.addMenu(\'File\')
file.addAction(\'new\')
file.addAction(\'cascade\')
file.addAction(\'tile\')
file.triggered.connect(self.showWindow)
#------定义QMdiArea,用来放置子窗口------
self.area=QMdiArea()
self.setCentralWidget(self.area)
def showWindow(self,data):
text=data.text()
if text==\'new\':
#创建一个新的窗口
subwindow=QMdiSubWindow()
#为子窗口添加组件
subwindow.setWindowTitle(\'这是QMdiSubWindow\')
subwindow.setWidget(QLabel(\'hello\'))
#将字窗口添加到区域QmdiArea
self.area.addSubWindow(subwindow)
#子窗口显示
subwindow.show()
if text==\'cascade\':
#设置窗口级联显示
self.area.cascadeSubWindows()
if text==\'tile\':
#设置窗口平铺显示
self.area.tileSubWindows()
if __name__==\'__main__\':
app=QApplication(sys.argv)
demo=MidArea()
demo.show()
sys.exit(app.exec_())
效果图:创建新的-------级联效果---------平铺效果