En mi aplicación wxPython he creado un wx.ScrolledPanel
, en el que hay que desplazar un gran wx.StaticBitmap
.Desplazarse por un `wx.ScrolledPanel` con la rueda del mouse y las teclas de flecha
Aparecen las barras de desplazamiento y puedo desplazarme con ellas, pero también me gustaría poder desplazarme con la rueda del mouse y las teclas de flecha del teclado. Sería bueno si el "Inicio", "RePág", y esas otras teclas también funcionarían como se esperaba.
¿Cómo puedo hacer esto?
ACTUALIZACIÓN:
veo el problema. ScrolledPanel puede desplazarse, pero solo cuando está enfocado. El problema es, ¿cómo puedo estar enfocado? Incluso hacer clic en él no lo hace. Solo si pongo un control de texto dentro de él puedo enfocarme en él y así desplazarme con la rueda. Pero no quiero tener un control de texto en él. Entonces, ¿cómo lo hago enfocar?
ACTUALIZACIÓN 2:
Aquí está un ejemplo de código que muestra este fenómeno. Descomente para ver cómo un control de texto hace que la rueda del mouse funcione.
import wx, wx.lib.scrolledpanel
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
scrolled_panel = \
wx.lib.scrolledpanel.ScrolledPanel(parent=self, id=-1)
scrolled_panel.SetupScrolling()
text = "Ooga booga\n" * 50
static_text=wx.StaticText(scrolled_panel, -1, text)
sizer=wx.BoxSizer(wx.VERTICAL)
sizer.Add(static_text, wx.EXPAND, 0)
# Uncomment the following 2 lines to see how adding
# a text control to the scrolled panel makes the
# mouse wheel work.
#
#text_control=wx.TextCtrl(scrolled_panel, -1)
#sizer.Add(text_control, wx.EXPAND, 0)
scrolled_panel.SetSizer(sizer)
self.Show()
if __name__=="__main__":
app = wx.PySimpleApp()
my_frame=MyFrame(None, -1)
#import cProfile; cProfile.run("app.MainLoop()")
app.MainLoop()
¿Pero dónde ponerlo? Es posible que desee cambiar el foco a algún otro widget, y luego regresar al ScrolledPanel nuevamente. –
1. Ver la pregunta en mi primer comentario. 2. Sí, he llamado a SetupScrolling. 3. ¿Realmente necesito reinventar la rueda con la tecla de inicio? ¿WxPython no implementa esto? –
Algo es extraño. Por ejemplo, en la demostración de wxPython, cuando el mouse está sobre cada panel, ese panel se desplazará con la rueda. Entonces algunas preguntas Si llama a 'SetFocus', ¿funciona? Si intenta desplazarse de la manera normal, haciendo clic en la barra de desplazamiento y moviéndose, ¿se mueve? Y si inmediatamente usa la rueda de desplazamiento, ¿funciona entonces? – tom10