Фокус следует за мышью в wxPython? - PullRequest
14 голосов
/ 24 сентября 2010

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

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 Ответ

2 голосов
/ 30 сентября 2010

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

...