簡體   English   中英

如何取消選擇QTreeWidget中的所有項目?

[英]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.

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