第15.27節 PyQt(Python+Qt)入門學習:Model/View架構中的便利類QTreeWidget詳解

一、引言

樹部件(Tree Widget)是Qt Designer中 Item Widgets(Item-Based)部件中提供的一個Model/View便利部件,對應類爲QTreeWidget類。

QTreeWidget類從QTreeView派生(繼承關係請參考《PyQt學習隨筆:Qt中Model/View相關的主要類及繼承關係》),是一個Model/View便利類,提供一個樹狀管理數據的界面視圖,爲了快速支持樹狀視圖展示數據,在類內使用了默認內置的樹狀模型保存數據項,每個數據項的類型都是QTreeWidgetItem對象。

不需要Model/View框架靈活性的開發人員可以很容易地使用QTreeWidget類來創建簡單的樹狀分層列表,但使用QTreeView 與標準項目模型相結合則更靈活,因爲QTreeView 與標準項目模型允許將數據的存儲與其界面呈現分離。

一個QTreeWidget類對象包括一個界面上顯示的部件框架及對應視口(關於視口請參考《PyQt(Python+Qt)學習隨筆:QAbstractScrollArea的viewPort(視口)理解》)、頭部標題項、數據項等部分組成。

二、樹型部件中的QTreeWidgetItem項

樹型部件的項是單獨的類對象,這個類就是QTreeWidgetItem,樹型部件的項用於保存樹型部件顯示數據的信息行。一個項對應的信息行可以包含幾列數據,每列都可以包含一個文本標籤和一個圖標。

項通常由父項構造,父項可以是QTreeWidget(用於頂級項)對象或QTreeWidgetItem對象(用於樹的二層及以下分支項)。
頂級項與樹的下層項之間的主要區別在於頂級項沒有parent()方法,這個區別可用於區分項之間的差異,並且在從樹中插入和移除項時有助於瞭解項的情況。

默認情況下,項的狀態是可用(enabled)、可選擇(selectable)、可選中(checkable)的,並且可以作爲拖放操作的源。可以通過使用適當的值調用setFlags()來更改每個項的標誌(關於項的標記請參考《PyQt(Python+Qt)學習隨筆:Model中項的標記flags取值及枚舉類型Qt.ItemFlag》)。

2.1、QTreeWidgetItem的構造方法

QTreeWidgetItem的構造方法如下:

  • QTreeWidgetItem(type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(label:Iterable[str], type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidget, type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidget, label:Iterable[str], type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidget, preceding:QTreeWidgetItem, type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidgetItem, type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidgetItem, label:Iterable[str], type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(parent:QTreeWidgetItem, preceding:QTreeWidgetItem, type: int = QTreeWidgetItem.Type)
  • QTreeWidgetItem(other: QTreeWidgetItem )

以上構造方法可以單獨構建項,也可以構建項之後將項插入到對應部件的對應位置。相關參數說明如下:

  • type參數用於指定項的類別

其類型爲枚舉類型QTreeWidgetItem.ItemType,樹型部件中的標準QTreeWidgetItem項對應的取值爲QTreeWidgetItem.Type(對應整數0),如果開發者需要從QTreeWidgetItem派生自定義項,則需要使用項的Type值大於等於QTreeWidgetItem.UserType(對應整型1000)的值,使用不同的type值的目的是爲了提供給開發者對自定義項進行諸如排序等特殊處理。

  • label參數用於指定項的顯示文字
    Iterable[str]表示參數類型爲迭代類型,其元素必須是str字符串。
  • parent表示項插入到的對應樹型部件或上級項節點
  • preceding表示要新建項插入的前一個項,即項插入到parent下的preceding節點後
  • other:表示項從另一個項複製一個項的數據
    注意項的type和對應的樹型部件不會從other複製。

2.2、QTreeWidgetItem的其他重要屬性或方法

2.2.1、項操作方法

2.2.1.1、項標記flags相關方法

QTreeWidgetItem項可以通過flags()返回項的標記,返回值類型爲類型Qt.ItemFlags,也可通過setFlags(Qt.ItemFlags flags)來設置項的標記,通過設置標記可以確認象是否可以進行選中、是否可編輯、是否可拖拽、是否支持複選框進行復選操作、是否可用等。具體項可以設置的屬性可以參考《PyQt(Python+Qt)學習隨筆:Model中項的標記flags取值及枚舉類型Qt.ItemFlag》的介紹。

2.2.1.2、判斷項是否disable方法

項的方法isDisabled()用於判斷項是否可用,返回True表示項禁用,返回False可用。

注意:項的disable設置方法只能通過setFlags方法進行。

2.2.1.3、判斷項是否首列跨所有列展示

項方法isFirstColumnSpanned()用於返回是否顯示時項的第一列數據跨越所有列,爲True即只顯示第一列數據,且佔用所有列的位置,爲False則顯示所有列數據。

可以調用方法setFirstColumnSpanned(bool span)來改變該屬性。

2.2.1.4、項隱藏相關方法

項可以隱藏不顯示,通過方法isHidden()判斷項是否隱藏,通過setHidden(bool hide)方法設置項是否隱藏。

2.2.1.5、項選中相關方法

如果flag設置項允許選擇,則項可以被選中,下圖頂層第二項爲選中狀態:
在這裏插入圖片描述
項是否選中可以通過項方法isSelected()來判斷,要設置項的選中狀態可以通過項的setSelected(bool select)方法來設置。

2.2.2、子項、父項相關操作方法

2.2.2.1、追加子項方法

項構建以後,可以通過addChild(QTreeWidgetItem child)方法在該項中的子節點最後加入另一個項child作爲該項的子項,也可以通過addChildren(iter[QTreeWidgetItem] children)將一個迭代類型children中的多個項加入到該項的子項最後。

如果要插入的項原來已經在QTreeWidgetItem對象中,則該項不會重複加入,如果是多項中有部分項已經在QTreeWidgetItem對象中,則這部分項不會重複加入,其他項則可以加入。

2.2.2.2、插入子項方法

除了追加子項到子項列表最後之外,可以通過insertChild(int index,QTreeWidgetItem child)方法在該項中的子項列表的index位置插入child對應項,該位置及其後位置的項自動後移,也可以通過insertChildren(int index, (iter[QTreeWidgetItem] children)將一個迭代類型children中的多個項從index位置開始順序插入,原位置的項自動後移。

2.2.2.3、項下子項的指示符展示原則childIndicatorPolicy

樹型部件中的項下可以有子項,如果存在子項,則父項的節點是否顯示展開或摺疊子項的提示符由屬性childIndicatorPolicy控制。

childIndicatorPolicy屬性的類型爲枚舉類型QTreeWidgetItem.ChildIndicatorPolicy ,對應取值及含義如下:
在這裏插入圖片描述

childIndicatorPolicy屬性默認值爲DontShowIndicatorWhenChildless,可以通過childIndicatorPolicy()和setChildIndicatorPolicy(QTreeWidgetItem.ChildIndicatorPolicy policy)來訪問。

2.2.2.4、展開子項

如果一個項有子項,可以調用setExpanded(bool expand)方法來展開或摺疊其子項,項的子項是否摺疊可以通過isExpanded()方法來判斷。

2.2.2.5、獲取項的父項或子項

可以通過child(int index) 方法獲取項的子項列表中序號爲index的項,注意index取值從0開始。子項的個數可以通過childCount()方法獲取,index的值必須小於子項的個數,否則返回None。

項的父項可以通過parent() 方法返回,但項如果是頂級項,parent()方法返回None,而不是返回對應的QTreeWidget對象,如果要返回項對應的QTreeWidget對象,可用treeWidget()方法,這個方法對頂級項和非頂級項都是一樣的。

2.2.2.6、獲取子項索引

可通過indexOfChild(QTreeWidgetItem child)方法返回項下子項child的位置索引,索引值從0計數,如果child對應項未在當前項的子項中,則返回-1。

2.2.2.6、removeChild刪除子項

removeChild是根據子項對象從項中刪除子項,調用方法爲removeChild(QTreeWidgetItem child),操作是從項中刪除child對應子項,注意該方法無返回,如果對應子項不存在也不報錯。

2.2.2.7、takeChild刪除並返回子項

removeChild是根據子項對象從項中刪除子項,但無返回,takeChild是根據子項的位置索引來刪除子項,同時將刪除的子項返回。調用方法爲:

QTreeWidgetItem takeChild(int index)

如果執行失敗,返回None。

2.2.2.8、takeChildren刪除所有子項

takeChildren()是將當前項的所有子項都刪除,並將所有子項存儲到一個列表中返回,如果當前項沒有子項,則返回空列表。

2.2.2.9、sortChildren對子項排序

sortChildren是對項的下層子項按指定列的文本進行排序,調用語法:

sortChildren(int column, Qt.SortOrder order)

Qt.SortOrder爲枚舉類,有兩個常量值,分別爲:AscendingOrder升序,對應數值爲0,DescendingOrder爲降序,對應數值爲1。

2.2.2.10、獲取項對應的樹型部件對象

treeWidget()方法返回項所在樹型部件對象,如果項沒有插入到樹型部件中,則返回None。

2.2.3、項中列相關的操作方法

2.2.3.1、項列數columnCount()方法

項的columnCount方法用於返回項中數據的列數,項數據的列數是在項中實際存儲的數據列數,當項構造時傳入數據或調用setText(int column,str text)方法增加數據時會改變項的列數。

2.2.3.2、項中列數據的訪問方法

樹型部件QTreeWidget中的QTreeWidgetItem項中可以有多列數據,每列數據可以根據列位置進行訪問。項中列數據的訪問方式有兩種:

  1. 通過data和setData方法
    可以通過項的data(int column, int role) 方法獲取項中指定列指定角色的數據,也可以通過setData(int column, int role, QVariant value)方法設置指定列指定角色的數據爲value。
  2. 通過text和setText方法
    可以通過項的text(int column) 方法獲取項中指定列的數據,也可以通過setText(int column, str value)方法設置指定的數據爲value。

2.2.3.3、項中列圖標的訪問方法

可以通過icon(int column)來訪問項中指定列的圖標,通過setIcon(int column, QIcon icon)來設置項中指定列的圖標。

如下面代碼將頂層第一項第5列的圖標設置爲指定文件:

self.treeWidget.topLevelItem(0).setIcon(4,QtGui.QIcon(r'F:\小圖標\動物\動物-025.gif'))

2.2.3.4、項中列的複選狀態訪問方法

項中每列數據都可以單獨設置複選狀態,如圖頂層第一項第一列設置了複選狀態:
在這裏插入圖片描述
項中列的複選狀態可以通過checkState(int column)來獲取,如果要改變項中指定列的複選狀態可以調用setCheckState(int column,Qt.CheckState state)來實施。

注意:

2.2.3.5、項中列的其他操作方法

項中的列還可以:

  • 通過textAlignment(int column) 、setTextAlignment(int column,int alignment)來操作文本的對齊方式
  • 通過toolTip(int column)、setToolTip(int column, str toolTip)來操作toolTip
  • 通過statusTip(int column)、setStatusTip(int column, str statusTip)來操作statusTip
  • 通過whatsThis(int column)、setWhatsThis(int column, str whatsThis)來操作whatsThis

三、QTreeWidget的屬性

3.1、概述

除了從父類繼承的屬性外,QTreeWidget在Designer中只有一個屬性columnCount屬性,另外還有個屬性在Designer中沒有的屬性topLevelItemCount。

3.2、columnCount屬性

樹型部件中的每個項有一個或多個文字標籤或其他裝飾符(如圖標),這些內容每個顯示爲一列。QTreeWidget的columnCount屬性用於控制和保存樹型部件窗口展示的每項列數,其缺省值爲1。在將項添加到樹型部件之前,必須使用setColumnCount()設置顯示的列數。項的列數可以通過columnCount()函數獲取。
下圖是在Designer中設置columnCount爲3時的截圖:
在這裏插入圖片描述
在上面介紹QTreeWidgetItem的columnCount屬性時,說明了QTreeWidgetItem和QTreeWidget的columnCount屬性之間的關係,在此不再重複。

3.3、topLevelItemCount屬性

topLevelItemCount屬性是一個只讀屬性,用於保存樹型部件中頂層項的個數,可以通過topLevelItemCount()方法獲取屬性值,缺省值爲0。

當樹型部件中頂層項的數目變化時,topLevelItemCount自動跟隨變化。

四、QTreeWidget的主要方法

樹型部件便利類QTreeWidget的主要方法老猿將其歸納爲五大類,分別是構造方法、項操作訪問方法、與項位置相關訪問方法、頂層項操作和訪問方法和部件頭訪問操作方法。

4.1、構造方法

QTreeWidget的構造方法非常簡單:

QTreeWidget(QWidget parent = None)

parent是父對象,一般設置爲QTreeWidget對象部署的窗口部件。

4.2、項操作訪問方法

在前面第二部分介紹了樹型部件中的項QTreeWidgetItem類的屬性和方法,除了項對象本身的操作方法外,在樹型部件QTreeWidget類中也提供了項(包括頂層項)的操作訪問方法。本部分介紹通用的項操作方法。

4.2.1、當前項操作訪問方法

當前項是指當前鼠標和鍵盤焦點所在項,在項可以進行選擇操作時,當前項可以是選中狀態,也可以是未選中狀態,選中項也不一定是當前項。與當前項相關的方法包括:

4.2.2、當前列訪問方法

樹型部件的currentColumn()方法返回當前項中得到焦點的列索引值,從0開始。如果沒有當前列,則返回-1。

4.2.3、獲取選中項的方法

在樹型部件根據選擇模式的設置,只要選擇模式不是NoSelection(關於選擇模式繼承自QAbstractItemView,請參考《PyQt(Python+Qt)學習隨筆:QAbstractItemView的selectionMode屬性》),則可以通過操作選中部件中的項。選中的項可以通過方法selectedItems()方法返回,其返回值爲一個列表,列表中的每個元素是一個選中的QTreeWidgetItem項實例。

4.2.4、搜索項

在樹型部件中,可以根據文本、搜索列以及匹配模式來搜索滿足條件的項,調用語法:

list[QTreeWidgetItem] findItems( str text, Qt.MatchFlags flags, int column = 0) 

返回值爲所有滿足條件的項構成的列表,如果沒有找到匹配項,返回空列表。
Qt.MatchFlags的取值及含義請參考《PyQt(Python+Qt)學習隨筆:Model/View中的枚舉類 Qt.MatchFlag的取值及含義》。

4.2.5、項排序

可以對樹型部件QTreeWidget中的項按照指定列進行排序,調用語法:

sortItems(int column, Qt.SortOrder order)

Qt.SortOrder爲枚舉類,有兩個常量值,分別爲:AscendingOrder升序,對應數值爲0,DescendingOrder爲降序,對應數值爲1。

4.2.6、項編輯

在樹型部件QTreeWidget中,有三種方法觸發進行項數據的編輯。

4.2.6.1、editTriggers觸發編輯

在《PyQt(Python+Qt)學習隨筆:QAbstractItemView的editTriggers屬性以及平臺編輯鍵(platform edit key )》介紹了QAbstractItemView可以通過設置editTriggers來觸發編輯,而QTreeWidget是QAbstractItemView類派生的,繼承了該屬性,因此通過設置該屬性爲非NoEditTriggers的值即可觸發編輯。

editTriggers可以在Qt Designer中設置,如圖:
在這裏插入圖片描述
也可以調用setEditTriggers(EditTriggers triggers)來觸發,關於EditTriggers 枚舉類請參考PyQt(Python+Qt)學習隨筆:QAbstractItemView的editTriggers屬性以及平臺編輯鍵(platform edit key )》。

4.2.6.2、editItem觸發編輯

QTreeWidget提供了進行項編輯的方法editItem,調用語法如下:

editItem(QTreeWidgetItem item, int column = 0)

4.2.6.3、openPersistentEditor打開持久編輯器

上面介紹editItem時說明了editItem只能觸發一次編輯,可以說進入臨時編輯狀態,一旦退出編輯除非再通過相關方式觸發編輯否則項不可再編輯。與此相對應,QTreeWidget還提供了一種一旦打開編輯狀態就可以隨時再次編輯,除非顯示關閉編輯狀態,這種方式就是打開持久編輯器。調用方法如下:

openPersistentEditor(QTreeWidgetItem item, int column = 0)

該方法沒有返回值。

4.2.7、項首列跨所有列展示

在前面介紹了QTreeWidgetItem項的isFirstColumnSpanned()方法,該方法用於返回是否顯示時項的第一列數據跨越所有列,並可以調用方法setFirstColumnSpanned(bool span)來改變該屬性。

在樹型部件QTreeWidget中也有類似方法,分別是isFirstItemColumnSpanned和setFirstItemColumnSpanned,調用方法如下:

  • bool isFirstItemColumnSpanned( QTreeWidgetItem item)
  • setFirstItemColumnSpanned( QTreeWidgetItem item, bool span)

這兩個方法與項方法isFirstColumnSpanned、setFirstColumnSpanned的作用完全相同,就是方法名和參數有所區別,由於是部件方法,參數中必須指定項,而isFirstColumnSpanned、setFirstColumnSpanned本身是項的實例方法,無需指定項。

4.3、頂層項操作訪問方法

在4.1部分介紹了樹型部件QTreeWidget方法中與項相關的方法,上述方法適用於所有樹型部件的項,除了這些方法之外,樹型部件QTreeWidget類還提供了部分與頂層項相關的訪問和操作方法。

4.3.1、取指定位置頂層項topLevelItem方法

topLevelItem方法根據位置索引取指定位置的頂層項,調用語法如下:
QTreeWidgetItem topLevelItem(int index)

4.3.2、訪問QTreeWidget的隱形根節點

該方法嚴格來說不屬於頂層項的方法,只是只有一個方法且確實能通過它方法頂層項,因此在此還是歸併到頂層項的方法中。

我們知道在數據結構上來說,任何樹都是有根節點的,但我們在QTreeWidget對象中並沒有看到界面上展示一個根節點,在QTreeWidget對象和數據項構建時也沒有指定這樣的根節點,但實際上這個根節點還是存在的,只是不可見,且該節點是樹型部件創建之後就自動創建,無論是否存在頂層項。

QTreeWidget提供了訪問該隱形根節點的方法,調用語法如下:

QTreeWidgetItem invisibleRootItem()

這個方法其實用途不大,主要是可以用於遞歸訪問樹的所有節點,遞歸不是從topLevelItem開始,而是從根節點開始,所有節點的類型都是QTreeWidgetItem ,可以用QTreeWidgetItem 的child方法逐層遞歸訪問。

4.3.3、給QTreeWidget增加頂層項的方法

QTreeWidget對象創建後,是沒有任何項的,要給部件增加項,首先要增加頂層項。頂層項的增加有三類方法,一類是在前面介紹的QTreeWidgetItem中的構造方法構造項時,直接將QTreeWidget對象作爲參數傳遞進去;第二類是利用上面介紹的隱形根節點,在隱形根節點下面調用QTreeWidgetItem相關方法增加子項即可;第三類就是直接調用QTreeWidget相關方法。

4.3.3.1、追加頂層項的方法

樹型部件構建以後,可以通過addTopLevelItem(QTreeWidgetItem item)方法在部件中頂層項的最後加入另一個項item項的頂層項,也可以通過addTopLevelItems(iter[QTreeWidgetItem] items)將一個迭代類型items中的多個項加入到頂層項的最後。

如果要插入的項原來已經在QTreeWidget的項中,則該項不會重複加入,如果是多項中有部分項已經在QTreeWidget的項中,則這部分項不會重複加入,其他項則可以加入。

4.3.3.2、插入頂層項方法

除了追加頂層項到頂層項最後之外,可以通過insertTopLevelItem(int index,QTreeWidgetItem item)方法在部件中頂層項列表的index位置插入item對應項,該位置及其後位置的項自動後移,也可以通過insertTopLevelItems(int index, (iter[QTreeWidgetItem] items)將一個迭代類型items中的多個項從index位置開始順序插入,原位置的項自動後移。

4.3.4、獲取頂層項位置的indexOfTopLevelItem方法

通過調用樹型部件的indexOfTopLevelItem方法可以獲得對應項在頂層項的位置,調用語法如下:

int indexOfTopLevelItem(QTreeWidgetItem item)
如果對應項未在頂層項中,則返回-1。

4.3.5、刪除指定位置的頂層項takeTopLevelItem方法

樹型部件的takeTopLevelItem方法可以從樹型部件中刪除對應項的節點並返回該項,調用語法如下:

QTreeWidgetItem takeTopLevelItem(int index)
如果對應位置無頂層項,則返回None。

4.4、與項位置相關的方法

4.4.1、項的上項和下項

項在樹型部件中展示時,其界面上面的項稱爲上項,其界面下面的項稱爲下項,上項和下項與項不一定是同一層級的。如下圖:
在這裏插入圖片描述
上圖中藍色選中的項(d:\)是當前項,其上項爲黃色標記的項(c:\Python),其下項是藍色框標記的項(d:\work)。這在Qt文檔中是沒有說明的,老猿是經過驗證確認的,具體驗證過程請參考《PyQt(Python+Qt)學習隨筆:樹型部件QTreeWidget的itemAbove、itemBelow方法作用探究》。

上項和下項的訪問方法如下:
  • itemAbove方法
    調用方法:QTreeWidgetItem itemAbove(QTreeWidgetItem item)
    返回參數item項之上的項。
  • itemBelow方法
    調用方法:QTreeWidgetItem itemBelow(const QTreeWidgetItem item)
    返回參數item項之下的項。
注意:當項摺疊和展開時,上項和下項會跟隨界面的變化而變化。

4.4.2、獲取指定位置項的itemAt方法

QTreeWidget的itemAt方法通過視口內的座標點獲取對應座標位置的項,相關調用方法如下:

  • QTreeWidgetItem itemAt( QPoint p)
  • QTreeWidgetItem itemAt(int x, int y)

通過該方法可以獲取到視口上對應座標所在的項,如果對應座標位置無項則返回None。

4.4.3、獲取可見項視口位置的矩形

樹型部件的visualItemRect方法可以返回參數指定項在視口矩形

QRect visualItemRect( QTreeWidgetItem item)
當項在樹型部件中不可見時,返回值爲一個空矩形(一個沒有矩形座標、長寬屬性的QRect()對象)。

4.5、QTreeWidget的標題屬性

樹型部件窗口可以有一個標題頭,其中包含部件中每個列的節(即標題)。QTreeWidget的標題屬性包括兩部分,一部分是標題項,一部分標題頭相關屬性。

4.5.1、標題項訪問方法

標題頭實際上是一個QTreeWidgetItem項,因此標題項相關的屬性就是QTreeWidgetItem想的屬性,相關屬性的訪問就通過QTreeWidgetItem的方法去訪問。樹型部件提供了這個項的訪問方法headerItem和setHeaderItem。調用語法如下:

  • QTreeWidgetItem QTreeWidget.headerItem()
  • QTreeWidget.setHeaderItem(QTreeWidgetItem item)

如果需要改變標題,可以通過項的setText方法進行。如:

		self.treeWidget.headerItem().setText(0, "文件或目錄名")
        self.treeWidget.headerItem().setText(1, "類型")
        self.treeWidget.headerItem().setText(2, "大小")

4.5.2、改變標題文本的方法

除了用上面的方法根據標題項設置標題文本外,還可以使用setHeaderLabel改變標題首列的標題文本,也可以使用setHeaderLabels改變從首列開始的多個列的標題文本,具體列數看參數傳遞列表的元素個數。調用語法如下:

  • setHeaderLabel(str label)
  • setHeaderLabels(labels:Iterable[str])

示例代碼:

self.treeWidget.setHeaderLabels(("文件或目錄名",'類型'))

4.5.3、標題頭相關屬性訪問方法

QTreeWidget標題相關屬性可以在Designer中設置,如圖:
在這裏插入圖片描述
這些屬性是從QTreeView繼承的。關於這些屬性的使用,請參考《PyQt(Python+Qt)學習隨筆:QTreeView的標題表頭header相關屬性》。

五、QTreeWidget小結

QTreeWidget樹型部件是一種內置存儲model的便利類,它可以方便的呈現樹型數據。QTreeWidget構造後,自動創建隱形根節點,隱形根節點不可見但可訪問,隱形根節點下的子項就是樹型部件的頂層項,頂層項創建後可以加入到樹型部件中,頂層項可以繼續添加子項,子項還可以再添加子項。相關項可以選中、刪除和訪問,部分操作能觸發特定的信號,通過這些信號可以確認操作影響的數據。

廣告

老猿關於PyQt的付費專欄《使用PyQt開發圖形界面Python應用》只需要9.9元,該部分與第十五章的內容基本對應,但同樣內容在付費專欄上總體來說更詳細、案例更多。本節內容對應付費專欄的《第二十二章、 Model/View便利類樹型部件QTreeWidget》。如果有興趣也願意支持老猿的讀者,歡迎購買付費專欄。

老猿Python,跟老猿學Python!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章