Seite 1 von 1

Keine Reaktion auf Tastendruck in einem Frame

Verfasst: Freitag 30. November 2007, 07:23
von Zap
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?

Re: Keine Reaktion auf Tastendruck in einem Frame

Verfasst: Freitag 30. November 2007, 07:55
von gerold
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
:-)

Verfasst: Freitag 30. November 2007, 10:55
von Zap
Hi gerold, klappt super mit den Accelerators.
Danke!