3

したがって、wx.TextCtrlとwx.lib.scrolledpanel.ScrolledPanelの両方を含む複数のwx.Panelを含むフレームがあります。マウスが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

scrollwindows フォーカス イベントのバインドを解除すると機能しますか?

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