记住PyQt中QTreeWidget的Scroll值

时间:2012-02-20 16:37:29

标签: python scroll pyqt

我有一个QTreeWidget,它从XML文件中读取数据。如果在任何时候XML文件被更改(认为许多用户一次访问所述文件),QTreeWidget将重新填充clear并重新读取。如果用户位于QTreeWidget的顶部,但是滚动方式,并且在清除后重新填充,则默认情况下它们将被重新置于顶部。

问题是,是否可以获得QTreeWidget的“滚动值”,然后在重新填充后返回相同的值?如果是这样,怎么样?提前谢谢!

1 个答案:

答案 0 :(得分:5)

您可以滚动到实际的先前值,就像您要求的那样,但是您确定结果的大小始终相同吗?在将你带到正确位置方面,这些数字可能毫无意义。但仅供参考,您必须访问滚动条,获取其值,然后执行重新填充,然后再次滚动该值:

bar = treeWidget.verticalScrollBar()
yScroll = bar.value()
# repopulate here ...
treeWidget.scrollContentsBy(0, yScroll)

但更有用的方法是找到当前视图或感兴趣的项目,然后重新填充树,然后告诉树滚动到该实际项目。那么现在项目中树的位置无关紧要(如果数据结构发生了显着变化)。

首先按某些标准保存当前项目:

item = treeWidget.currentItem() # one way
item = treeWidget.itemAt(centerOfTree) # another way

# either save the text value or whatever the custom 
# identifying value is of your item
text = item.text()

获得该数据值后,无论是文本值还是其他一些自定义数据值,您都可以重新填充树,然后再次查找该项。

# this is assuming the item is both present, 
# and referencing it by its string value
newItem = treeWidget.findItems(text)[0]
treeWidget.scrollToItem(newItem)

您可以修改此项以适合您的实际物品类型。您可能会在项目上存储一些其他自定义值以再次找到它们。