我已经尝试过我可以在网上遇到的所有建议,从设置标志到使用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)
它主要是添加数据库,平均数据库,垃圾压缩和数据库。结果,作为导航菜单的固定部分,然后使用保存文件中的数据库名称填充数据库的子项。
答案 0 :(得分:1)
您的问题未能公开导致问题的部分代码。默认情况下,像您一样设置当前项目也会设置选择。因此,此代码正确地将选择设置为项目" 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
后的其他内容。
答案 1 :(得分:0)
在Pyside2中,这对我有用: 如果单击treewidget,则选择将被清除。
self.treeWidget.setSelectionMode(QtWidgets.QAbstractItemView.ContiguousSelection)