Запоминание значения прокрутки QTreeWidget в PyQt - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть QTreeWidget, который читает данные из файла XML. Если в какой-то момент XML-файл изменяется (например, многие пользователи обращаются к указанному файлу за один раз), QTreeWidget снова заполняется clear и перечитывается. Если пользователь находится где-либо, кроме вершины QTreeWidget, с точки зрения прокрутки, и он снова заполняется после очистки, он по умолчанию возвращается наверх.

Вопрос в том, можно ли получить «значение прокрутки» QTreeWidget и затем вернуться к тому же значению после повторного заполнения? Если так, то как? Заранее спасибо!

1 Ответ

5 голосов
/ 20 февраля 2012

Вы можете прокрутить до фактических предыдущих значений, как вы спрашиваете, но уверены ли вы, что ваши результаты всегда будут одинакового размера?Эти цифры могут быть бессмысленными, если вы снова попадете в нужное место.Но просто для справки: вам нужно получить доступ к полосе прокрутки, взять ее значение, затем выполнить повторное заполнение, а затем снова прокрутить это значение:

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)

Вы можете изменить его, чтобы он соответствовал вашему фактическому типу элементов.,Вы можете хранить некоторые другие пользовательские значения для элементов, чтобы найти их снова.

...