簡體   English   中英

在 PyQT5 中擴展 QTreeView 中的項目

[英]Expanding item in QTreeView in PyQT5

我正在嘗試學習 PyQt 並遵循其文檔。 所以我有這個簡單的代碼,它應該在QteeView. 文檔https://doc.qt.io/qt-5/qtreeview.html#expandexpand()方法“擴展索引指定的 model 項目”。 但它不起作用。 我也試過setExpand()expandAll()都不起作用。

我應該如何閱讀此文檔以使我的代碼執行它應該執行的操作?

此練習是幫助我將所有文件夾展開到最深文件夾的第一步,因為expandAll()僅展開樹的第一層。

from PyQt5.QtWidgets import *

class GUI(QWidget):
   def __init__(self, parent=None):
       super(GUI, self).__init__(parent)

       path = "C:/TEMP"
       self.model = QFileSystemModel()
       self.model.setRootPath(path)

       self.view = QTreeView()
       self.view.setModel(self.model)
       self.view.setRootIndex(self.model.index(path))

       self.but_1 = QPushButton(self)
       self.but_1.setText("BUT 1")

       self.but_2 = QPushButton(self)
       self.but_2.setText("BUT 2")

       self.V_layout = QVBoxLayout()
       self.V_layout.addWidget(self.view)

       self.V_layout.addWidget(self.but_1)
       self.V_layout.addWidget(self.but_2)
       self.setLayout(self.V_layout)

       index_1 = self.model.index("C:/TEMP")
       index_2 = self.model.index("C:/TEMP/bbbbb")

       self.but_1.clicked.connect(lambda: self.aaa(index_1))
       self.but_2.clicked.connect(lambda: self.aaa(index_2))

       self.view.expandAll()

   def aaa(self, index):
       self.view.expand(index)
       self.view.setExpanded(index, True)
       print(index)
       
if __name__ == "__main__":
   import sys
   app = QApplication(sys.argv)
   g = GUI()
   g.show()
   sys.exit(app.exec_())

不要在 lambda function 中傳遞索引,而是嘗試傳遞路徑,然后在調用 expand 之前獲取索引。 我不完全確定為什么,但這樣做對我來說效果很好。

例如:

       path_1 = "C:/TEMP"
       path_2 = "C:/TEMP/bbbbb"

       self.but_1.clicked.connect(lambda: self.aaa(path_1))
       self.but_2.clicked.connect(lambda: self.aaa(path_2))

   def aaa(self, path):
       index = self.model.index(path)
       self.view.expand(index)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM