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.
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
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!