Cry*_*ite 0 python scroll pyqt
我有一个QTreeWidget,它从XML文件中读取数据.如果在任何时候XML文件被更改(认为许多用户一次访问所述文件),QTreeWidget将重新填充clear并重新读取.如果用户位于QTreeWidget的顶部,但是滚动方式,并且在清除之后重新填充,则默认情况下它们将被重新置于顶部.
问题是,是否可以获得QTreeWidget的"滚动值",然后在重新填充后返回相同的值?如果是这样,怎么样?提前致谢!
您可以滚动到实际的先前值,就像您要求的那样,但是您确定结果总是相同吗?在将你带到正确位置方面,这些数字可能毫无意义.但仅供参考,您必须访问滚动条,获取其值,然后执行重新填充,然后再次滚动该值:
bar = treeWidget.verticalScrollBar()
yScroll = bar.value()
# repopulate here ...
treeWidget.scrollContentsBy(0, yScroll)
Run Code Online (Sandbox Code Playgroud)
但更有用的方法是找到当前视图或感兴趣的项目,然后重新填充树,然后告诉树滚动到该实际项目.然后,在树中项目现在存在的位置无关紧要(如果数据结构发生了显着变化).
首先按一些标准保存当前项目:
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()
Run Code Online (Sandbox Code Playgroud)
获得该数据值后,无论是文本值还是其他一些自定义数据值,您都可以重新填充树,然后再次查找该项.
# this is assuming the item is both present,
# and referencing it by its string value
newItem = treeWidget.findItems(text)[0]
treeWidget.scrollToItem(newItem)
Run Code Online (Sandbox Code Playgroud)
您可以修改它以适合您的实际物品类型.您可能会在项目上存储一些其他自定义值以再次找到它们.