簡體   English   中英

在PyQt中記住QTreeWidget的Scroll值

[英]Remembering Scroll value of a QTreeWidget in PyQt

我有一個QTreeWidget,它從XML文件讀取數據。 如果在任何時候更改了XML文件(認為許多用戶一次訪問了該文件),則將QTreeWidget重新填充為clear並重新讀取。 如果用戶位於QTreeWidget頂部以外的任何位置(按滾動方式),並且在清除后重新填充,默認情況下會將他們帶回頂部。

問題是,是否可以獲取QTreeWidget的“滾動值”,然后在重新填充后返回到相同的值? 如果是這樣,怎么辦? 提前致謝!

您可以像詢問的那樣滾動到實際的先前值,但是您確定結果將始終是相同大小嗎? 這些數字對於將您再次帶到正確的位置可能毫無意義。 但是,僅供參考,您必須訪問滾動條,獲取其值,然后執行重新填充,然后再次滾動該值:

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)

您可以修改它以適合您的實際項目類型。 您可能會在項目上存儲一些其他自定義值以再次找到它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM