1. 程式人生 > 程式設計 >python GUI庫圖形介面開發之PyQt5 MDI(多文件視窗)QMidArea詳細使用方法與例項

python GUI庫圖形介面開發之PyQt5 MDI(多文件視窗)QMidArea詳細使用方法與例項

PyQt5 MDI(多文件視窗)QMidArea簡介

一種同時顯示多個視窗的方法是,建立多個獨立的視窗,這些獨立的視窗被稱為SDI(Single Document Interface 單文件介面),每個視窗都有自己的菜單系統,工具欄等,這需要佔用很多資源

MDI(Multiple Document Interface 多文件介面)應用程式佔用較少的記憶體資源,子視窗可以放在主視窗的容器中,這個容器控制元件被稱為QMidArea

QMidArea控制元件通常佔據在QMainWindow物件的中央位置,子視窗在這個區域是QMdiSubWindow類的例項,可以設定任何QWidget作為子視窗物件的內部控制元件,子視窗在MDI區域進行級聯排列布局

QMidArea類和QMdiSubWindow類中的常用方法

方法 描述
addSubWindow() 將一個小控制元件新增在MDI區域作為一個新的子視窗
removeSubWindow() 刪除一個子視窗的小控制元件
setActiveSubWindow() 啟用一個子視窗
cascadeSubWindows() 安排子視窗在MDI區域級聯顯示
tileSubWindows() 安裝子視窗在MDI區域平鋪顯示
closeActiveSubWindow() 關閉活動的子視窗
subWindowList() 返回MDI區域的子視窗列表
setWidget() 設定一個小控制元件作為QMdiSubWindow例項物件的內部控制元件

QMdiArea多重文件介面程式碼例項

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class MainWindow(QMainWindow):
  count=0
  def __init__(self,parent=None):
    super(MainWindow,self).__init__(parent)
    #例項化Qmidarea區域
    self.mdi=QMdiArea()
    #設定為中間控制元件
    self.setCentralWidget(self.mdi)
    #例項化選單欄
    bar=self.menuBar()
    #新增主選單
    file=bar.addMenu('File')
    #新增子選單
    file.addAction('New')
    file.addAction('cascade')
    file.addAction('Tiled')
    #點選QAction繫結自定義的槽函式(傳遞有值【QAction】)
    file.triggered[QAction].connect(self.windowaction)
    #設定主視窗的標題
    self.setWindowTitle("MDI demo")
  def windowaction(self,q):
    print('Triggered')
    if q.text()=='New':
      #子視窗增加一個
      MainWindow.count=MainWindow.count+1
      #例項化多文件介面物件
      sub=QMdiSubWindow()
      #向sub內新增內部控制元件
      sub.setWidget(QTextEdit())
      #設定新建子視窗的標題
      sub.setWindowTitle('subWindow'+str(MainWindow.count))
      #將子視窗新增到Mdi區域
      self.mdi.addSubWindow(sub)
      #子視窗顯示
      sub.show()
    if q.text()=='cascade':
      #cascadeSubWindows():安排子視窗在Mdi區域級聯顯示
      self.mdi.cascadeSubWindows()
    if q.text()=='Tiled':
      #tileSubWindow():安排子視窗在Mdi區域平鋪顯示
      self.mdi.tileSubWindow()
if __name__ == '__main__':
  app=QApplication(sys.argv)
  demo=MainWindow()
  demo.show()
  sys.exit(app.exec_())

級聯顯示

python GUI庫圖形介面開發之PyQt5 MDI(多文件視窗)QMidArea詳細使用方法與例項

平鋪顯示

python GUI庫圖形介面開發之PyQt5 MDI(多文件視窗)QMidArea詳細使用方法與例項

程式碼分析

在這個例子中,主視窗QMainWindow擁有一個選單控制元件和 MidArea控制元件

    #例項化選單欄
    bar=self.menuBar()
    #新增主選單
    file=bar.addMenu('File')
    #新增子選單
    file.addAction('New')
    file.addAction('cascade')
    file.addAction('Tiled')

當單擊選單控制元件時觸發triggered訊號,連線到槽函式windowaction()

file.triggered[QAction].connect(self.windowaction)

當選擇選單NEw動作時,會新增一個新的Mdi,每個Mdi都有標題,在主視窗內部增加Mdi的數量

      #子視窗增加一個
      MainWindow.count=MainWindow.count+1
      #例項化多文件介面物件
      sub=QMdiSubWindow()
      #向sub內新增內部控制元件
      sub.setWidget(QTextEdit())
      #設定新建子視窗的標題
      sub.setWindowTitle('subWindow'+str(MainWindow.count))
      #將子視窗新增到Mdi區域
      self.mdi.addSubWindow(sub)
      #子視窗顯示
      sub.show()

當選擇選單中的Cascade和tiled動作時,會在主視窗顯示自視窗的排序方式,級聯顯示或者平鋪顯示

    if q.text()=='cascade':
      #cascadeSubWindows():安排子視窗在Mdi區域級聯顯示
      self.mdi.cascadeSubWindows()
    if q.text()=='Tiled':
      #tileSubWindow():安排子視窗在Mdi區域平鋪顯示
      self.mdi.tileSubWindow()

本文主要講解了PyQt5 MDI(多文件視窗)QMidArea詳細使用方法與例項,更多關於PyQt5控制元件的使用知識請檢視下面的相關連結