Синхронизируем скроллинг в двух таблицах — wxPython #44

автор

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

В данной статье мы поместим две таблицы в SplitterWindow и синхронизируем их. Учтите, что показанные мною в примерах способы будут работать только в случае скроллинга посредством полосы прокрутки, а не колёсика мыши.

Когда вы запустить тот фрагмент кода, который я предлагаю в качестве примера, то должны будете увидеть что-то вроде:

Теперь же давайте взглянем на код:

Фрагмент, который интересует нас больше всего – это класс ScrollSync. Он принимает две панели, в которых таблицы расположены в качестве аргументов. Когда мы привязываем таблицы к wx.EVT_SCROLLWIN и, пока он запущен, мы изменяем положение противоположной таблиц.

В данной момент у этого кода есть несколько ограничений. Он работает только тогда, когда вы физически передвигаете полосу прокрутки используя курсор своей мышки. Если вы будете использовать колёсико мышки, или же клавиши PageUp и PageDown, таблицы синхронизироваться не будут. Я пытался добавить поддержку прокрутки посредством колёсика мышки, используя событие wx.EVT_MOUSEWHEEL, но оно не обеспечивает такого варианта Ориентации или Позиции, который обеспечивает wx.EVT_SCROLLWIN. Проще – его Position является wx.Point, а wx.EVT_SCROLLWIN, в свою очередь, возвращает Integer. Добавление этих битов – весьма забавный процесс, но они остаются за бортом данной статьи.

Итоги

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

Вам может быть интересно

Scroll Up