Keine Reaktion auf Tastendruck in einem Frame

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo zusammen, ich suche jetzt schon ne ganze Weile, komme aber nicht weiter.
Und zwar möchte ich ganz simpel, dass beim Focus auf einem Frame, auf
die F1 Taste reagiert wird und sich eine Aboutbox öffnet.

Hier mal ein kleiner Testcode in dem ich nur dieses Vorhaben ausprobiere:

Code: Alles auswählen

#!/usr/bin/env python

import wx

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.button_1 = wx.Button(self, -1, "button_1")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnButton, self.button_1)
        # Warum bekomme ich keine Reaktion?
        self.Bind(wx.EVT_KEY_DOWN, self.OnButton, id=wx.WXK_F1)

    def __set_properties(self):
        self.SetTitle("frame_1")

    def __do_layout(self):
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add(self.button_1, 0, 0, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()

    def OnButton(self, evt):
        info = wx.AboutDialogInfo()
        info.Name = "Hello World"
        wx.AboutBox(info)

if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = MyFrame(None, -1, "")
    app.SetTopWindow(frame_1)
    frame_1.Show()
    app.MainLoop()
Ich hab das auch mal mit Registerhotkey ausprobiert aber irgendwie kann ich mir nicht vorstellen, dass eine solche Funktionalität nur unter Windows funktioniert.

Weiß jemand ne Lösung?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Zap hat geschrieben:Und zwar möchte ich ganz simpel, dass beim Focus auf einem Frame, auf die F1 Taste reagiert wird und sich eine Aboutbox öffnet.
Hallo Zap!

Zwei Möglichkeiten.

Du erstellst ein Menü und gibst im Menü als Text z.B. so etwas an:
text = u"&Info...\tF1"

Oder du arbeitest mit der wx.AcceleratorTable. Die funktioniert auch ohne Menüeintrag. Ist aber aufwändiger.

http://www.python-forum.de/post-50048.html#50048

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hi gerold, klappt super mit den Accelerators.
Danke!
Antworten