質問しているように、実際の以前の値にスクロールすることはできますが、結果は常に同じサイズになりますか?これらの数字はあなたを正しい場所に連れて行くという意味で意味がありません。しかし、単に参考のために、あなたは、あなたの再増殖を行い、スクロールバーにアクセスし、その値を取らなければならないだろうし、再度その値をスクロール:
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)
これは、実際のアイテムのタイプに合わせて変更できます。それらを再度見つけるためにアイテムに他のカスタム値を保存しているかもしれません。
出典
2012-02-20 17:26:48
jdi
通常、データ構造は削除または追加すると1つのアイテムによって変更されるだけなので、スクロールバーの位置はあまり離れてはいけません。あなたは正しいパスで私を得ましたが、treeWidgetのscrollContentsByメソッドを使用しても機能しませんでした。しかし、スクロールバーを呼び出して、treeWidget.verticalScrollBar()を使用していたのは何でしたか?setSliderPosition(yScroll) – Cryptite