2010-09-24 1 views
14

Я разрабатываю приложение, которое содержит несколько панелей. Смотрите screenshot:Focus-follow-mouse в wxPython?

screenshot

  • Левое настройки панели является wx.ScrolledPanel, который содержит ряд wx.Panels.
  • Верх события pane is wx.grid.Grid.
  • Дно данные pane является wx.Panel, который содержит wx.grid.Grid.
  • Средние участок панель wx.Panel содержит участок enthought chaco.
  • Право Детектор pane is wx.Panel.

Я хотел бы реализовать фокус следует мыши так, что когда я двигаю мышь над сюжетом я могу сразу увеличивать или уменьшать масштаб, используя мое колесо прокрутки без первого щелчка на участке, чтобы дать ему фокус.

Точно так же, когда я двигаю мышь над левыми настройкой, верхние событие или нижние данные стекла Я хотел бы, чтобы иметь возможность немедленно прокручивать окно, используя колесо прокрутки без первого щелчка на окне ,

В настоящее время я определил функцию:

def focusFollowsMouse(window): 
    window.Bind(wx.EVT_ENTER_WINDOW, lambda event: window.SetFocus()) 

Я хотел бы применить эту функцию только на четырех панелях верхнего уровня: участок, настройки, события и данных.

Однако мне нужно вызвать эту функцию для каждой панели или элемента управления в каждой из верхних панелей верхнего уровня, чтобы заставить это работать. Например, мне нужно применить эту функцию по отдельности к . Параметры измерения, Параметры анализа, Просмотреть настройки и т. Д. Панели.

Скорее всего, событие EVT_ENTER_WINDOW не распространяется на родительские окна.

Есть ли способ заставить это работать без применения focusFollowsMouse к каждой под-панели или к управлению?

Благодаря

+4

Мне нравится фокус-мышкой для моей среды окон, но если это произойдет в приложении с использованием традиционного набора виджета, неожиданным и противоречивым. – llasram

+0

Я согласен в целом, однако в этом приложении пользователю часто приходится переключаться между панелью настроек и графиком. Я немного раздражаю, чтобы непрерывно щелкнуть по сюжету, прежде чем можно увеличить. Обратите внимание, что я еще не прошел проверку юзабилити. Так что я могу ошибаться. –

+2

Это поведение Windows - оно работает так, как вы ожидаете в GTK. Лично я оставил ваше приложение таким, какое оно есть, для обеспечения совместимости с другими приложениями Windows и установкой WizMouse: http://antibody-software.com/web/software/software/wizmouse-makes-your-mouse-wheel-work -on-the-window-under-the-mouse/ –

ответ

1

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