PYQT5學習(13):QMidArea同時顯示多個窗口,創建多個獨立的窗口


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_())

  效果圖:創建新的-------級聯效果---------平鋪效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM