将滚动事件路由到wxPython中的ScrolledPanel而不路由焦点

将滚动事件路由到wxPython中的ScrolledPanel而不路由焦点,python,scroll,focus,wxpython,Python,Scroll,Focus,Wxpython,因此,我得到了一个包含多个wx.panel的框架,其中包含一个wx.TextCtrl和一个wx.lib.scrolledpanel.scrolledpanel。当鼠标在wx.Panel上时,我想将任何鼠标滚动事件路由到ScrolledPanel(因此,TextCtrl或Panel都不必具有焦点),而不必将焦点路由到以前拥有的任何控件 例如,我以前找到的解决方案是让鼠标在ScrolledPanel上的任何移动都给它焦点-但这会使焦点远离TextCtrl 我已尝试在wx.Panel上绑定EVT_MO

因此,我得到了一个包含多个wx.panel的框架,其中包含一个wx.TextCtrl和一个wx.lib.scrolledpanel.scrolledpanel。当鼠标在wx.Panel上时,我想将任何鼠标滚动事件路由到ScrolledPanel(因此,TextCtrl或Panel都不必具有焦点),而不必将焦点路由到以前拥有的任何控件

例如,我以前找到的解决方案是让鼠标在ScrolledPanel上的任何移动都给它焦点-但这会使焦点远离TextCtrl

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


想法?

解除scrollwindows焦点事件的绑定是否有效

    self.scrollwin.Unbind(wx.EVT_SET_FOCUS)
    self.scrollwin.Unbind(wx.EVT_KILL_FOCUS)

在滚动面板上的每个wx.Panel上,当鼠标在滚动面板上移动时,必须绑定一个事件以将焦点设置到滚动面板

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()
如果没有为滚动面板上列出的每个面板创建类,也可以在线执行此操作: