Вот пример, который должен делать то, что вы хотите, я надеюсь. ( Редактировать : В ретроспективе это не совсем работает, например, когда есть две прокручиваемые панели ... Я оставлю это здесь, хотя, так что peole может понизить его или что-то в этом роде.) По сути, я положил все в панели внутри рамки (как правило, хорошая идея), а затем установите фокус на этой главной панели.
import wx
import wx, wx.lib.scrolledpanel
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
main_panel = wx.Panel(self, -1)
main_panel.SetBackgroundColour((150, 100, 100))
self.main_panel = main_panel
scrolled_panel = \
wx.lib.scrolledpanel.ScrolledPanel(parent=main_panel, id=-1)
scrolled_panel.SetupScrolling()
self.scrolled_panel = scrolled_panel
cpanel = wx.Panel(main_panel, -1)
cpanel.SetBackgroundColour((100, 150, 100))
b = wx.Button(cpanel, -1, size=(40,40))
self.Bind(wx.EVT_BUTTON, self.OnClick, b)
self.b = b
text = "Ooga booga\n" * 50
static_text=wx.StaticText(scrolled_panel, -1, text)
main_sizer=wx.BoxSizer(wx.VERTICAL)
main_sizer.Add(scrolled_panel, 1, wx.EXPAND)
main_sizer.Add(cpanel, 1, wx.EXPAND)
main_panel.SetSizer(main_sizer)
text_sizer=wx.BoxSizer(wx.VERTICAL)
text_sizer.Add(static_text, 1, wx.EXPAND)
scrolled_panel.SetSizer(text_sizer)
self.main_panel.SetFocus()
self.Show()
def OnClick(self, evt):
print "click"
if __name__=="__main__":
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1)
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
Для управления с клавиатуры, например, для установки действия с помощью клавиши home, я думаю, вам нужно будет привязать эти события и ответить соответствующим образом, например, используя mypanel.Scroll(0,0)
для клавиши home
(и не забывайте звонить evt.Skip()
для событий клавиатуры, на которые вы не действуете). ( Edit: Я не думаю, что есть какие-либо привязки клавиш по умолчанию для прокрутки. Я не уверен, что я хотел бы также любой, например, что должно произойти, если есть прокручиваемая панель в прокручиваемой панели ?)