wxPython - Taste F2 abfangen.

Plattformunabhängige GUIs mit wxWidgets.
Antworten
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Hallo ich möchte bestimmte Tasten abfangen. Z.B. die Taste F2 oder die Tastenkombinationen wie z.B. Alt + F4. Wie geht das? Ich habe zwar hier gelesen das manche das mit dem Skript Pygame machen, aber ich suche halt eine andere Lösung. Zur Zeit bastel ich gerade an der Demo von Robin Dunn, aber bin noch nicht weit gekommen. Also wenn jemadn von euch eine Lösung hat......

Greetz from 2bock :wink:
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Anbei ein kleines Beispiel, wie Du in einem Frame KeyEvents abfangen kannst. Dabei bindest Du ein KeyDown Event an das Framefenster und wenn gewünscht auch an alle anderen Widgets in dem Frame. Wird nun eine Taste gedrückt wird die angegebene Funktion aufgerufen und das Event auf entsprechende Tasten getestet.
Willst Du ein Alt+F4 verhindern mußt Du zusätzlich EVT_CLOSE binden und dort evt. das Schließen verhindern.

Code: Alles auswählen

from wxPython.wx import *

class MyFrame(wxFrame):
    
    def __init__(self, *args, **kwds):
        kwds["style"] = wxDEFAULT_FRAME_STYLE
        wxFrame.__init__(self, *args, **kwds)
        self.button_1 = wxButton(self, wxNewId(), "button_1")
        
        EVT_KEY_DOWN( self, self.OnPressKey )   
        EVT_KEY_DOWN( self.button_1, self.OnPressKey )   
        
        self.SetTitle("Frame 1")          

        sizer_1 = wxBoxSizer(wxVERTICAL)
        sizer_1.Add(self.button_1, 0, 0, 0)
        self.SetAutoLayout(1)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        sizer_1.SetSizeHints(self)
        self.Layout()
        
    def OnPressKey( self, event ):
        if event.m_keyCode == WXK_F4:
            if event.AltDown():
                print "ALT+F4"
            else:
                print "F4"

2bock_not_logged

Ich habe zwar noch eine andere Lösung gefunden, aber diese hier ist top. Also Danke nochmal für den Tip!!

Greetz 2bock :wink: :wink:
Antworten