Я пытаюсь обновить QTreeWidget каждые 60 секунд. У меня есть это на QTimer прямо сейчас, но я обеспокоен тем, что при его обновлении он нарушит работу пользователей (например, если у них есть родительский доступ, чтобы вы могли видеть детей, когда я его полностью обновляю). Есть ли модель или что-то, что я могу сделать, чтобы это не мешало их прогрессу?PyQt TreeWidget Smooth update (model-view?)
ответ
Невозможно, чтобы представление обновляло и запоминало ранее расширенные элементы. Вы можете кэшировать состояние своего представления и восстановить его с помощью QTreeWidget::expand
и QTreeWidget::scrollTo
после обновления, но пользователь все равно увидит, как просмотр закрывается и расширяется снова. Кроме того, было бы недостаточно сохранить индекс текущего расширенного элемента, поскольку это может измениться после обновления. Таким образом, вам придется кэшировать уникальный идентификатор и затем искать его в расширенном виджетах.
Что вы пытаетесь сделать, довольно необычно, так как обычно вы обновляете виджет только тогда, когда данные меняются, а не на фиксированный интервал времени.
Рассмотрите возможность использования QTreeView в сочетании с QAbstractListModel вместо QTreeWidget, поскольку последний предназначен для хранения постоянных данных. Затем вы можете испускать dataChanged на модели, которая автоматически обновляет QTreeView.
Спасибо за совет, я думаю, что я попытаюсь реализовать TreeView и обновить его при изменении данных. Я дам вам знать, как это происходит. – sudobangbang