首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何取消选择QTreeWidget中的所有项?

如何取消选择QTreeWidget中的所有项?
EN

Stack Overflow用户
提问于 2015-08-24 14:07:33
回答 2查看 4.9K关注 0票数 1

从设置标志到使用selectionModel,我已经尝试了所有可以在网上找到的建议。

代码语言:javascript
运行
复制
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:

编辑:是使用以下代码构建的:

代码语言:javascript
运行
复制
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)

它基本上是将数据库、平均数据库、浪费合成和结果添加为导航菜单中的固定部分,然后在保存文件中使用数据库的名称填充数据库的子数据库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-31 10:22:01

您的问题未能公开导致问题的代码部分。默认情况下,与您所做的一样,设置当前项也会设置所选内容。例如,这段代码正确地将选择设置为“b”项:

代码语言:javascript
运行
复制
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,则选择将成为累积:

代码语言:javascript
运行
复制
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之后还调用了什么。

票数 1
EN

Stack Overflow用户

发布于 2018-12-20 15:55:05

在Pyside2中,这对我来说是可行的:如果您单击treewidget,所选内容将是明确的。

代码语言:javascript
运行
复制
self.treeWidget.setSelectionMode(QtWidgets.QAbstractItemView.ContiguousSelection)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32184385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档