Pregunta

Tengo un cuaderno wxPython, en este caso un wx.aui.AuiNotebook . (pero este problema también ha ocurrido con otros tipos de cuadernos). En mi cuaderno tengo un widget, en este caso una subclase de ScrolledPanel , para el cual estoy tratando de hacer un manejo de eventos personalizado ( para wx.EVT_KEY_DOWN ). Sin embargo, los eventos no están siendo manejados. Revisé mi código fuera del cuaderno, y el manejo de eventos funciona, pero cuando coloco mi widget en el cuaderno, el controlador de eventos no parece ser invocado cuando ocurre el evento.

¿El cuaderno de alguna manera bloquea el evento? ¿Cómo resuelvo esto?

¿Fue útil?

Solución

Intenté reproducir tu problema pero funcionó bien para mí. Lo único en lo que puedo pensar es que hay una de sus clases que también se enlaza a wx.EVT_KEY_DOWN y no llama a wx.Event.Skip () en su devolución de llamada. Eso evitaría un mayor manejo del evento. Si su panel desplazado se encuentra en una secuencia descendente de dicho objeto en la secuencia de controladores de eventos, nunca verá el evento.

Para referencia, aquí hay un ejemplo que me funcionó (en Windows). ¿Es lo que estás haciendo muy diferente a esto?

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top