[英]Expanding item in QTreeView in PyQT5
我正在嘗試學習 PyQt 並遵循其文檔。 所以我有這個簡單的代碼,它應該在QteeView.
文檔https://doc.qt.io/qt-5/qtreeview.html#expand說expand()
方法“擴展索引指定的 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.