【问题标题】:Routing scroll events to ScrolledPanel in wxPython without routing focus在没有路由焦点的情况下将滚动事件路由到 wxPython 中的 ScrolledPanel
【发布时间】:2012-04-28 13:54:55
【问题描述】:

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

例如,我之前找到的解决方案是让鼠标在 ScrolledPanel 上的任何移动都赋予它焦点 - 但是这会将焦点从 TextCtrl 转移。

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

想法?

【问题讨论】:

    标签: python scroll focus wxpython


    【解决方案1】:

    在 ScrolledPanel 上的每个 wx.Panel 上,当鼠标移动到 ScrolledPanel 上时,您必须绑定一个事件以将焦点设置到 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()
    

    如果您没有为滚动面板上的每个列出的面板创建一个类,您也可以内联:

    【讨论】:

      【解决方案2】:

      解除绑定滚动窗口焦点事件是否有效?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-03
        • 1970-01-01
        • 2016-10-16
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 2011-08-30
        • 2020-05-12
        相关资源
        最近更新 更多