所以我一直在嘗試實現一個適當的TreeView,根據用戶輸入顯示目錄和文件 - 我允許用戶遞歸或以其他方式添加目錄和文件到他的「項目」之後,我創建了我自己的該項目內容的樹視圖。PyQt treeview編輯文本雙擊
現在,我的問題是,儘管我在這個主題上找到的大多數文檔和其他問題似乎都想禁用treeview項目的可編輯性,但我試圖(和失敗)找到一種方法來啓用它。我想讓用戶能夠雙擊我的樹形視圖中任何列的任何單元格,然後編輯其內容。有誰知道如何做到這一點?
下面是我用來在tabView Widget中生成一個選項卡的代碼,之後我添加了TreeView。 TreeView的項目稍後通過AddParent和AddChild方法添加。
class treeTab(QtWidgets.QWidget):
def __init__(self,core,main,label):
super (treeTab,self).__init__()
self.label = label
self.core = core
self.sizes = core.UISizes
self.tab_sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding)
self.tree = QtWidgets.QTreeWidget(self)
self.tree.setColumnCount(len(self.sizes.projectTreeColumnLabels))
self.tree.setHeaderLabels(self.sizes.projectTreeColumnLabels)
self.tree.setSizePolicy(self.tab_sizePolicy)
self.tree_layout = QtWidgets.QGridLayout()
self.tree_layout.objectName = self.label + "TreeGridLayout"
self.tree.setLayout(self.tree_layout)
self.treeroot = self.tree.invisibleRootItem()
self.tree.setSelectionMode(Qt.QAbstractItemView.ContiguousSelection)
def addParent(self, parent, column, title, data):
item = QtWidgets.QTreeWidgetItem(parent, [title])
item.setData(column, QtCore.Qt.UserRole, data)
item.setChildIndicatorPolicy(QtWidgets.QTreeWidgetItem.ShowIndicator)
item.setExpanded (True)
return item
def addChild(self, parent, column, title, data):
item = QtWidgets.QTreeWidgetItem(parent, [title])
item.setData(column, QtCore.Qt.UserRole, data)
item.setText(1,data.print_tags())
item.setText(2,data.category.name)
item.setText(3,data.format)
item.setCheckState (column, QtCore.Qt.Unchecked)
item.setFlags(item.flags() or QtCore.Qt.ItemIsEditable)
return item
很簡單嗎?你真正需要做的就是用'|'替換'或',按照three_pineapples的答案... – ekhumoro
在任何情況下,我的方式可能會更長,但它也可以工作 – MaVCArt
事實上,使用我的方法,你可以實際上捕捉到雙擊事件並阻止某些列可編輯,或者實現編輯某個列值的不同方法 - 比如,在雙擊時彈出一個新窗口,而不是直接編輯它包含的任何值。這打開了幾個選項,簡單的文本編輯防止:) – MaVCArt