从设置标志到使用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:

编辑:是使用以下代码构建的:
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)它基本上是将数据库、平均数据库、浪费合成和结果添加为导航菜单中的固定部分,然后在保存文件中使用数据库的名称填充数据库的子数据库。
发布于 2015-08-31 10:22:01
您的问题未能公开导致问题的代码部分。默认情况下,与您所做的一样,设置当前项也会设置所选内容。例如,这段代码正确地将选择设置为“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之后还调用了什么。
https://stackoverflow.com/questions/32184385
复制相似问题