Focus-follow-mouse в wxPython?

Я разрабатываю приложение, содержащее несколько панелей. Смотрите снимок экрана:

screenshot

  • Левая панель настроек - это 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 к каждой подпанели или элементу управления?

Спасибо

Ответы

Ответ 1

Это поведение Windows - оно работает так, как вы ожидаете в GTK. Лично я оставил ваше приложение таким, какое оно есть, для согласованности с другими приложениями Windows и установите WizMouse