【发布时间】:2011-04-16 16:51:32
【问题描述】:
我正在开发一个包含多个窗格的应用程序。见screenshot:
- 左侧设置窗格是一个
wx.ScrolledPanel,其中包含多个wx.Panels。 - 顶部的事件窗格是
wx.grid.Grid。 - 底部数据窗格是一个
wx.Panel,其中包含一个wx.grid.Grid。 - 中间的情节窗格是一个
wx.Panel,其中包含一个enthought chaco情节。 - 右侧检测器窗格是
wx.Panel。
我想实现 焦点跟随鼠标,这样当我将鼠标移到绘图上时,我可以立即使用滚轮放大或缩小,而无需先单击绘图以使其获得焦点.
同样,当我将鼠标移到左侧 settings 、顶部 events 或底部 data 窗格上时,我希望能够立即使用滚轮滚动窗口,而无需先单击窗口。
目前我定义了一个函数:
def focusFollowsMouse(window):
window.Bind(wx.EVT_ENTER_WINDOW, lambda event: window.SetFocus())
我只想在四个*窗格中应用此功能:plot、settings、events 和 data .
但是,我需要为每个*窗格中的每个子面板或控件调用此函数才能使其正常工作。例如,我需要将此功能单独应用于测量设置、分析参数、查看设置等面板。
EVT_ENTER_WINDOW 事件很可能不会传播到父窗口。
有没有办法在不将focusFollowsMouse 应用于每个子面板或控件的情况下使其工作?
谢谢
【问题讨论】:
-
我喜欢将焦点跟随鼠标用于我的窗口环境,但在使用传统小部件集的应用程序中发生这种情况似乎出乎意料且违反直觉。
-
我一般同意,但是在这个应用程序中,用户经常需要在设置面板和绘图之间切换。我发现在能够缩放之前连续单击绘图有点烦人。但是请注意,我还没有进行任何可用性测试。所以这可能是我弄错了。
-
这是 Windows 的行为 - 在 GTK 下它可以正常工作。就个人而言,为了与其他 Windows 应用程序保持一致,我会保留您的应用程序,并安装 WizMouse:antibody-software.com/web/software/software/…
-
感谢您的提示。我一定会试试 WizMouse。
-
@Steven,如果您将评论放入“答案”中,则可以对其进行投票,然后可以从“未回答”页面中删除此问题。应该是这样,因为它确实已经得到了回答。