3

所以我有一个包含多个 wx.Panel 的框架,其中包含一个 wx.TextCtrl 和一个 wx.lib.scrolledpanel.ScrolledPanel。当鼠标悬停在 wx.Panel 上时,我想将任何鼠标滚动事件路由到 ScrolledPanel(因此无论是 TextCtrl 还是面板,它们中的任何一个都不一定具有焦点) -无需将焦点从之前拥有的任何控件上移开。

例如,我之前找到的解决方案是让鼠标在 ScrolledPanel 上的任何移动都赋予它焦点 - 但是这个路由焦点远离了 TextCtrl。

我尝试在 wx.Panel 上绑定 EVT_MOUSEWHEEL,但是当我抓取 event.GetWheelDelta() 或 event.GetWheelRotation() 时,这似乎没有任何作用

想法?

4

2 回答 2

1

在该 ScrolledPanel 上的每个 wx.Panel 上,当鼠标在其上移动时,您必须绑定一个事件以将焦点设置到 ScrolledPanel。

class ListItem(wx.Panel):
    def __init__(self, parent):
        super(ListItem, self).__init__(parent)

        self.Bind(wx.EVT_MOTION, self.OnMouseMotion)

        #Add all your other objects to this panel as normal

    def OnMouseMotion(self, event):
        panel = event.GetEventObject().GetParent()        
        panel.SetFocus()

如果您没有为滚动面板上的每个列出的面板创建一个类,您也可以在线执行此操作:

于 2016-10-12T18:58:02.167 回答
0

取消绑定滚动窗口焦点事件是否有效?

    self.scrollwin.Unbind(wx.EVT_SET_FOCUS)
    self.scrollwin.Unbind(wx.EVT_KILL_FOCUS)
于 2013-06-25T03:15:04.543 回答