1. 程式人生 > >《快速掌握PyQt5》第二十一章 拆分視窗QSplitter

《快速掌握PyQt5》第二十一章 拆分視窗QSplitter

第二十一章 拆分視窗QSplitter

拆分視窗中可以新增許多子控制元件,各個子控制元件通過拆分線相互分隔開來,拖動該拆分線可以隨意改變子控制元件大小。

21.1 示例

下面我們將上一章中的QListView、QTreeView和QTableWidget放到拆分視窗中,三個檢視全都只用QDirModel來顯示檔案目錄。請看下方程式碼:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QSplitter, QListView, QTreeView, QTableView, QDirModel


class Demo(QSplitter):                                          # 1
    def __init__(self):
        super(Demo, self).__init__()
        self.dir_model = QDirModel(self)                        # 2

        self.list_view = QListView(self)                        # 3
        self.tree_view = QTreeView(self)
        self.table_view = QTableView(self)
        self.list_view.setModel(self.dir_model)
        self.tree_view.setModel(self.dir_model)
        self.table_view.setModel(self.dir_model)

        self.tree_view.doubleClicked.connect(self.show_func)    # 4

        # self.setOrientation(Qt.Vertical)                      # 5
        self.addWidget(self.list_view)
        self.addWidget(self.tree_view)
        self.insertWidget(0, self.table_view)
        self.setSizes([300, 200, 200])
        print(self.count())

    def show_func(self, index):
        self.list_view.setRootIndex(index)
        self.table_view.setRootIndex(index)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

1. 繼承QSplitter;

2. 例項化QDirModel模型;

3. 分別例項化QListView、QTreeView和QTableView,然後將這三個檢視的模型設為dir_model;

4. 將QTreeView的doubleClicked訊號和自定義的槽函式連線起來,QtAssistant中對該訊號解釋如下:

所以我們知道每當雙擊時,被雙擊項的索引就會儲存在index中,而這個引數會傳給槽函式:

def show_func(self, index):
    self.list_view.setRootIndex(index)
    self.table_view.setRootIndex(index)

在槽函式中我們呼叫setRootIndex()並傳入index值,也就是說,每當我們雙擊QTreeView中的某項時,QListView和QTableView就會將該項的索引設為自身的根索引,並顯示相應的目錄結構;

5. 拆分視窗預設是水平的,可以呼叫setOrientation(Qt.Vertical)方法將其設為垂直方向。呼叫addWidget()方法將檢視新增到拆分視窗中。insrtWidget(int, widget)可以將控制元件插入到相應的位置,第一個引數為要插入的索引位置,第二個引數為控制元件。setSizes(iterable)可以設定各個子控制元件的寬度(如果拆分視窗為垂直方向的話,則該方法會設定高度)。count()方法返回拆分視窗中的控制元件數量。

執行截圖如下:

拖動拆分線可以隨意改變子控制元件大小:

21.2 小結

1. 可以把拆分拆分視窗當作一種特殊的佈局管理器來使用,讓介面各控制元件更有靈活性;

2. 要多使用QtAssistant進行查詢,比如某訊號是否可以傳引數。

----------------------------------------------------------------------

喜歡的小夥伴可以加入這個Python QQ交流群一起學習:820934083