Seite 1 von 1

Keycode für Strg+C und Strg+V

Verfasst: Freitag 20. Juni 2008, 11:47
von ete
Hallo!

Wie definiert man den Keycode für Strg+C und Strg+V? Wenn ich das in der wx Demo ausprobiere, erhalte ich 22 und 3. Das funktioniert aber bei Abfragen (if event.keycode() == 22) nicht... Wenn ich mir einfach den Keycode print'en lasse, erhalte ich nur die Codes für die einzelnen Tasten aber nicht für die jeweilige Kombination.

Kann jemand helfen?

Liebe Grüsse
Stefanie

Verfasst: Freitag 20. Juni 2008, 12:41
von HWK
Hast Du es schon mit event.GetKeyCode() probiert? Damit müsste es nach der Demo über KeyEvents eigentlich funktionieren.
MfG
HWK

Verfasst: Freitag 20. Juni 2008, 12:57
von ete
Sorry hatte mich verschrieben, ich meinte GetKeyCode().
Geht nicht...Bekomme im Interpreter nur die Codes der einzelnen Tasten und in der Demo Code 3 für strg+c und 22 für strg+v.

Code: Alles auswählen

if event.GetKeyCode() ==3:
    bla
Tut sich nichts...Kontrolle funktioniert super (z.B. mit Taste 1)

Verfasst: Samstag 21. Juni 2008, 15:44
von HWK
Was bedeuten 'Interpreter' (etwa Idle?) und 'Kontrolle funktioniert super'? Könntest Du etwas mehr Code zeigen?
MfG
HWK

Edit: Ich habe es jetzt einmal mit einem Minimalprogramm ausprobiert. Bei mir funktioniert alles tadellos. Wenn es bei Dir immer noch nicht laufen sollte, musst Du mehr Informationen, insbesondere Code liefern.

Verfasst: Mittwoch 25. Juni 2008, 10:51
von ete
ok:

Code: Alles auswählen

def OnKey(self, event):
        print event.GetKeyCode()
        if event.GetKeyCode() == 49:
            print "one"
            self.selection()
            self.copy()
    
        if event.GetKeyCode() == 50:
            print "two"
            self.selection()
            self.paste()       

        # Skip other Key events
        if event.GetKeyCode():
            event.Skip()
            return

Verfasst: Mittwoch 25. Juni 2008, 11:00
von ete
ok, hier ein Auszug:

Code: Alles auswählen

def OnKey(self, event):
        print event.GetKeyCode()
        if event.GetKeyCode() == 49:
            print "one"
            self.selection()
            self.copy()
    
        elif event.GetKeyCode() == 50:
            print "two"
            self.selection()
            self.paste()       

        elif event.GetKeyCode():
            event.Skip()
            return


1) print event.GetKeyCode() gibt im Idle wenn ich strg+v drücke nur die Codes der einzelnen Tasten aus (308 für strg und 86 für v)
2) Wenn ich 1 oder 2 drücke (Keycode 49 bzw. 50) funktioniert alles und er fürt self.copy und self.paste aus.
3) Wenn ich in der wxDemo das Keyevent Beispiel ausprobiere, erhalte ich für strg+v als char 22. Setze ich dieses aber in der keycode Abfrage anstatt 49 ein, also

Code: Alles auswählen

if event.GetKeyCode() == 22:
            print "ok"
            self.selection()
            self.copy()
...wird self.copy nicht ausgeführt...

Ich hoffe das war verständlicher!
Stefanie

Verfasst: Mittwoch 25. Juni 2008, 11:03
von EyDu
"elif" und "else" sind hier angebracht ;-) Und wenn die Methode nicht noch weiter geht, dann ist das return etwas seltsam.

Wenn du das "self.selection()" in "copy" und "past" hineinziehst (und die Methode nicht länger ist), dann geht es noch etwas kürzer:

Code: Alles auswählen

{49:self.copy, 50:self.paste}.get(event.GetKeyCode(), event.Skip)()

Verfasst: Mittwoch 25. Juni 2008, 11:13
von ete
Ja, klar hab mich vertippt und es geht noch weiter:D
Hab's editiert :P
EyDu hat geschrieben:

Code: Alles auswählen

{49:self.copy, 50:self.paste}.get(event.GetKeyCode(), event.Skip)()
Diese Schreibart ist irgendwie nicht mein Ding...

Verfasst: Mittwoch 25. Juni 2008, 12:41
von HWK
Das Problem dürfte wie so oft Idle sein. Läuft es denn in der Konsole?
Dies ist mein Testscript:

Code: Alles auswählen

import wx

class MyPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        tc = wx.TextCtrl(self, -1, 'Dummy', size=(125, -1))
        tc.Bind(wx.EVT_CHAR, self.on_char)

    def on_char(self, event):
        keycode = event.GetKeyCode()
        modifiers = ''
        for mod, ch in [(event.ControlDown(), 'C'),
                        (event.AltDown(),     'A'),
                        (event.ShiftDown(),   'S'),
                        (event.MetaDown(),    'M')]:
            if mod:
                modifiers += ch
            else:
                modifiers += '-'
        print keycode, modifiers
        if keycode == 22:
            print 'String-V'
        elif keycode == 3:
            print 'String-C'

def main():
    app = wx.PySimpleApp(False)
    frame = wx.Frame(None, -1, 'Titel', size=(500, 500))
    panel = MyPanel(frame)
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()
Es funktioniert problemlos sowohl in der Konsole als auch (wohl zufälligerweise) in Idle.
MfG
HWK

Verfasst: Mittwoch 25. Juni 2008, 13:16
von ete
Ok, in der Konsole geht's...Mein Script, sowie auch deines.
Vielen Dank!