wxPython中的"焦点跟随鼠标"是什么?

18
我正在开发一个应用程序,其中包含许多面板,请参见截图

screenshot

  • 左侧的设置窗格是一个包含多个wx.Panelwx.ScrolledPanel
  • 顶部的事件窗格是一个wx.grid.Grid
  • 底部的数据窗格是一个包含wx.grid.Gridwx.Panel
  • 中间的绘图窗格是一个包含enthought chaco绘图的wx.Panel
  • 右侧的检测器窗格是一个wx.Panel

我想要实现鼠标跟随焦点,这样当我将鼠标移动到绘图上时,我可以立即使用滚轮缩放而不必先单击绘图以给它焦点。

同样,当我将鼠标移动到左侧的设置、顶部的事件或底部的数据窗格上时,我想要能够立即使用滚轮滚动窗口,而不必先单击窗口。

目前我定义了一个函数:

def focusFollowsMouse(window):
    window.Bind(wx.EVT_ENTER_WINDOW, lambda event: window.SetFocus())
我想仅在四个顶层面板上应用此函数:plotsettingseventsdata
但是,我需要为每个顶级面板中的每个子面板或控件调用此函数才能使其起作用。例如,我需要分别将此函数应用于Measurement SettingsAnalysis ParametersView Settings等面板。
很可能EVT_ENTER_WINDOW事件不会传播到父窗口。
是否有一种方法可以在不对每个子面板或控件应用focusFollowsMouse的情况下使其生效?
谢谢

4
我喜欢使用焦点跟随鼠标的窗口环境,但在使用传统控件集的应用程序中出现这种情况似乎有些出人意料和违反直觉。 - llasram
总体而言,我同意,但在这个应用程序中,用户经常需要在设置面板和图形之间切换。我觉得不断点击图形才能缩放有点烦人。但请注意,我还没有进行任何可用性测试。所以可能只是我错了。 - Bas van Dijk
2
这是Windows的行为 - 在GTK下它按照你的期望工作。就个人而言,我会保留你的应用程序,以保持与其他Windows应用程序的一致性,并安装WizMouse:http://antibody-software.com/web/software/software/wizmouse-makes-your-mouse-wheel-work-on-the-window-under-the-mouse/ - Steven Sproat
谢谢你的提示。我一定会试试WizMouse。 - Bas van Dijk
1
@Steven,如果您将您的评论放到一个"答案"中,它就可以被投票,并且这个问题就可以从"未回答"页面中删除。由于它确实已经得到了答复,所以应该这样做。 - LarsH
1个回答

2

这是 Windows 的行为 - 在 GTK 下,它按照您的期望工作。个人建议您保留应用程序原样,在与其他 Windows 应用程序一致的情况下,并安装 WizMouse


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接