2012-04-17 43 views
3

所以我有一個框架包含多個wx.Panels,其中包含一個wx.TextCtrl和一個wx.lib.scrolledpanel.ScrolledPanel。當鼠標移動到wx.Panel上時,我想要將任何鼠標滾動事件發送到ScrolledPanel(因此無論是TextCtrl還是面板,都沒有必要擁有焦點) - 沒有將焦點從以前的任何控件路由。在沒有路由焦點的wxPython中將滾動事件滾動到ScrolledPanel

例如,我之前找到的解決方案是讓任何鼠標移動到ScrolledPanel上使它聚焦 - 但是這個路由集中遠離TextCtrl。

我試過在wx.Panel結合EVT_MOUSEWHEEL,但似乎並沒有做任何事情的時候我抓住要麼event.GetWheelDelta()或event.GetWheelRotation()

想法?

回答

0

是否解除了滾動窗口焦點事件的工作?

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

在每個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() 

你也可以做到這一點的線,如果你不是你的滾動屏上創建每個列出的面板類: