wxPython中的鼠标焦点跟随?

18 投票
1 回答
7509 浏览
提问于 2025-04-16 04:33

我正在开发一个包含多个面板的应用程序。你可以看看这个截图

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

这是Windows的表现方式——在GTK下,它的工作方式符合你的预期。就我个人而言,我建议你保持你的应用程序现在的样子,这样和其他Windows应用程序保持一致。同时可以安装WizMouse这个工具。

撰写回答