문제

나는 wxpython 노트가 있습니다.이 경우 a wx.aui.AuiNotebook. (그러나이 문제는 다른 종류의 노트북에서도 발생했습니다.) 내 노트북에는 위젯이 있습니다.이 경우 서브 클래스가 있습니다. ScrolledPanel, 나는 몇 가지 사용자 정의 이벤트 처리를하려고합니다 ( wx.EVT_KEY_DOWN). 그러나 이벤트는 처리되지 않습니다. 노트북 외부의 코드를 확인했는데 이벤트 처리가 작동하지만 위젯을 노트북에 넣으면 이벤트 핸들러가 이벤트가 발생할 때 호출되지 않는 것 같습니다.

노트북이 어떻게 든 이벤트를 차단합니까? 이것을 어떻게 해결합니까?

도움이 되었습니까?

해결책

나는 당신의 문제를 재현하려고 시도했지만 그것은 나에게 잘 작동했습니다. 내가 생각할 수있는 유일한 것은 당신의 수업 중 하나가 wx.EVT_KEY_DOWN 그리고 전화하지 않습니다 wx.event.skip () 콜백에서. 그것은 이벤트의 추가 취급을 방해 할 것입니다. 스크롤 된 패널이 일련의 이벤트 핸들러 시퀀스에서 그러한 객체의 다운 스트림이되면 이벤트를 볼 수 없습니다.

참고로 다음은 저를 위해 일한 예입니다 (Windows에서). 당신이하는 일이 이것과 크게 다릅니 까?

import wx
import wx.aui, wx.lib.scrolledpanel

class AppFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        wx.Frame.__init__(self, *args, **kwds)

        # The notebook
        self.nb = wx.aui.AuiNotebook(self)

        # Create a scrolled panel
        panel = wx.lib.scrolledpanel.ScrolledPanel(self, -1)
        panel.SetupScrolling()
        self.add_panel(panel, 'Scrolled Panel')

        # Create a normal panel
        panel = wx.Panel(self, -1)
        self.add_panel(panel, 'Simple Panel')

        # Set the notebook on the frame
        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.nb, 1, wx.EXPAND)
        self.SetSizer(self.sizer)

        # Status bar to display the key code of what was typed
        self.sb = self.CreateStatusBar()

    def add_panel(self, panel, name):
        panel.Bind(wx.EVT_KEY_DOWN, self.on_key)
        self.nb.AddPage(panel, name)

    def on_key(self, event):
        self.sb.SetStatusText("key: %d [%d]" % (event.GetKeyCode(), event.GetTimestamp()))
        event.Skip()

class TestApp(wx.App):
    def OnInit(self):
        frame = AppFrame(None, -1, 'Click on a panel and hit a key')
        frame.Show()
        self.SetTopWindow(frame)
        return 1

if __name__ == "__main__":
    app = TestApp(0)
    app.MainLoop()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top