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_())
效果圖:創建新的-------級聯效果---------平鋪效果



