Я разрабатываю приложение, содержащее несколько панелей. Смотрите снимок экрана:
- Левая панель настроек - это
wx.ScrolledPanel
, которая содержит числоwx.Panels
. - Верхняя панель событий -
wx.grid.Grid
. - Нижняя панель данных - это
wx.Panel
, которая содержитwx.grid.Grid
. - Средняя панель сюжета - это
wx.Panel
, содержащая график enthought chaco. - Правая панель детектора -
wx.Panel
.
Я хотел бы реализовать фокус, следуя за мышью, чтобы при перемещении мыши по сюжету я могу сразу увеличивать или уменьшать масштаб с помощью колеса прокрутки без предварительного щелчка по графику, чтобы придать ему фокус.
Аналогично, когда я перемещаю мышь над левыми настройками, верхними событиями или нижними панелями данных, я хотел бы иметь возможность немедленно прокручивать окно с помощью колеса прокрутки без первого щелчка по окну.
В настоящее время я определил функцию:
def focusFollowsMouse(window):
window.Bind(wx.EVT_ENTER_WINDOW, lambda event: window.SetFocus())
Я хотел бы применить эту функцию только к четырем верхним уровням: сюжет, настройки, события и данные.
Однако мне нужно вызвать эту функцию для каждой панели или элемента управления в каждой из панелей верхнего уровня, чтобы заставить это работать. Например, мне нужно применить эту функцию по отдельности к панелям параметров измерения, параметров анализа, просмотра и т.д.
Скорее всего, событие EVT_ENTER_WINDOW
не распространяется на родительские окна.
Есть ли способ заставить это работать, не применяя focusFollowsMouse
к каждой подпанели или элементу управления?
Спасибо