多文檔界面
? ? ? ? ?一個典型的GUI應(yīng)用程序可能有多個窗口,選項(xiàng)卡控件和堆棧窗口控件允許一次石永紅其中的一個窗口。然而,很多時候這種方法不是很好用,因?yàn)槠渌翱诘囊晥D是隱藏的。
????????一種同時顯示多個窗口的方法是創(chuàng)建多個獨(dú)立的窗口,這些獨(dú)立的窗口被稱為SDI(Single Document Interface,單文檔界面),每個窗口都可以有自己的菜單系統(tǒng)、工具欄等。這需要占用較多的內(nèi)存資源。
????????MDI(Multiple Document Interface,多文檔界面)應(yīng)用程序占用較少的內(nèi)存資源,子窗口都可以放在主窗口容器中,這個容器控件被稱為QMdiArea。
????????QMdiArea控件通常占據(jù)在QMainWindow對象的中央位置,子窗口在這個區(qū)域是QMdiSubWindow類的實(shí)例,可以設(shè)置任何QWidget作為子窗口對象的內(nèi)部控件,子窗口在MDI區(qū)域進(jìn)行級聯(lián)排列布局。
QMdiArea類和QMdiSubWindow類中的常用方法如下表所示。

實(shí)例1:多重文檔界面
演示在PyQt5的窗口中使用QMdiArea控件,完整代碼如下:
代碼分析:
在這個例子中,主窗口QMainWindow擁有一個菜單控件和MidArea控件。
當(dāng)程序運(yùn)行時,顯示如下:

當(dāng)單擊菜單控件觸發(fā)triggered信號,連接到槽函數(shù)windowaction()。
當(dāng)選擇菜單中的“New”動作時,會添加一個新的MDI,每個MDI都有標(biāo)題,在主窗口內(nèi)部會添加MDI的數(shù)量。
我們可以隨意添加點(diǎn)擊"New"添加窗口,比如添加了8個,顯示如下:

在“File”下,除了"New“外,還有“cascade”和“Tiled”動作,功能是選擇子窗口的排列方式,“cascade”是級聯(lián)顯示,效果如下:

“Tiled”是平鋪顯示子窗口,效果如下:

看起來是不是很有意思呢,趕快自己動手試一試吧!