WXPYTHON : 노트북 안에있는 위젯에서 이벤트 처리
-
05-07-2019 - |
문제
나는 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()
제휴하지 않습니다 StackOverflow