[英]How to deselect all items in QTreeWidget?
從設置標志到使用selectionModel,我都嘗試了我可以在線遇到的每條建議
def DatabaseLoadWrapper(self,database, init):
self.treeWidget.currentItemChanged.disconnect(self.updateStackedWidget)
self.DatabaseLoad(database, init)
self.treeWidget.clearSelection()
self.treeWidget.setCurrentItem(self.treeWidget.findItems(self.selectedDatabase,Qt.MatchExactly|Qt.MatchRecursive)[0])
self.treeWidget.currentItemChanged.connect(self.updateStackedWidget)
這是我的代碼需要在QTreeWidget上強制選擇的地方,我使用的任何代碼都不會引發任何錯誤,但也不會影響選擇。 最后,用戶選擇了數據庫1,但是我需要恢復為僅選擇數據庫2:
編輯:Tree Widget是使用以下代碼構建的:
def setupMenu(self):
self.DatabaseParent = QTreeWidgetItem(['Databases'])
for item in NamesInDatabase():
self.DatabaseParent.addChild(QTreeWidgetItem([item]))
self.AverageParent = QTreeWidgetItem(['Averaged Database'])
self.SortingParent = QTreeWidgetItem(['Waste Composition'])
self.ResultParent = QTreeWidgetItem(['Results'])
self.treeWidget.addTopLevelItem(self.DatabaseParent)
self.treeWidget.addTopLevelItem(self.AverageParent)
self.treeWidget.addTopLevelItem(self.SortingParent)
self.treeWidget.addTopLevelItem(self.ResultParent)
它基本上是在導航菜單的固定部分中添加數據庫,平均數據庫,廢物組成和結果,然后用保存文件中的數據庫名稱填充數據庫的子級。
您的問題無法揭示導致問題的代碼部分。 默認情況下,與您一樣設置當前項目也會設置選擇。 因此,例如,此代碼正確地將選擇設置為項目“ b”:
from PySide import QtCore,QtGui
if __name__ == '__main__':
import sys
qApp = QtGui.QApplication(sys.argv)
treeWidget = QtGui.QTreeWidget()
parent = QtGui.QTreeWidgetItem(['Databases'])
items = []
for item_text in ["a","b","c"]:
item = QtGui.QTreeWidgetItem([item_text])
items.append(item)
parent.addChild(item)
treeWidget.addTopLevelItem(parent)
treeWidget.setCurrentItem(items[1])
treeWidget.show()
sys.exit(qApp.exec_())
但是,我懷疑您項目中其他地方的代碼會影響到這一點。 例如,如果您已將QTableWidget
選擇模型的選擇模式設置為MultiSelection,則選擇將變為累積式:
from PySide import QtCore,QtGui
if __name__ == '__main__':
import sys
qApp = QtGui.QApplication(sys.argv)
treeWidget = QtGui.QTreeWidget()
parent = QtGui.QTreeWidgetItem(['Databases'])
items = []
for item_text in ["a","b","c"]:
item = QtGui.QTreeWidgetItem([item_text])
items.append(item)
parent.addChild(item)
treeWidget.addTopLevelItem(parent)
treeWidget.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
treeWidget.setCurrentItem(items[0])
treeWidget.setCurrentItem(items[2])
treeWidget.show()
sys.exit(qApp.exec_())
但是,這仍然不能解釋您的問題,因為無論如何, clearSelection
調用應該已經清除了先前的選擇。 需要對代碼進行進一步的調試,例如,以檢查包裝函數和setCurrentItem
是否如您所要求的那樣被調用。 還要檢查DatabaseLoadWrapper
之后還調用了什么。
在Pyside2中,這對我有用:如果單擊treewidget,則選擇將被清除。
self.treeWidget.setSelectionMode(QtWidgets.QAbstractItemView.ContiguousSelection)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.