Seite 1 von 1

Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 09:59
von kevind
Hallo Zusammen,

ich folge den tkinter Übungen aus einem Buch. Nun komme ich zum Problem das Python3 unter Linux nicht richtig mit Sonderzeichen umgehen kann. Also bei Tastaturereignissen.

Bis zu e.bind("<p>", kev) funktioniert es wunderbar, dannach laufe ich in folgenden Fehler:
Traceback (most recent call last):
File "ex17-keys.py", line 20, in <module>
e.bind("<+>",kev)
File "/usr/lib/python3.2/tkinter/__init__.py", line 977, in bind
return self._bind(('bind', self._w), sequence, func, add)
File "/usr/lib/python3.2/tkinter/__init__.py", line 932, in _bind
self.tk.call(what + (sequence, cmd))
_tkinter.TclError: bad event type or keysym "+"
Ersetze ich das "+" durch einen Buchstaben funktioniert es wieder.

Hat mir hier jemand einen Tipp ?

Gruss, Kev

Code: Alles auswählen

import tkinter

def ende():
    main.destroy()

#def kev(e):
    #lbanz["text"] = "Zeichen:" + e.char + ", Beschreibung:" + e.keysym + ",codezahl: " + str(e.keycode)

def kev(e):
        lbanz["text"] = "Zeichen:" + e.char \
        + ", Beschreibung: " + e.keysym \
        + ", Codezahl: " + str(e.keycode)

main = tkinter.Tk()

#key events

e = tkinter.Entry(main)
e.bind("<p>",kev)
e.bind("<+>",kev)
e.bind("<%>",kev)
e.bind("<,>",kev)
e.pack()

#hilfelabel
lbhlp = tkinter.Label(main, text="taste: p oder + oder % oder ,", width=40)
lbhlp.pack()

#anzeigelabel 

lbanz = tkinter.Label(main)
lbanz.pack()

#ende button
bende = tkinter.Button(main, text = "ende", command = ende)
bende.pack()

main.mainloop()


Re: Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 10:51
von nomnom
Du benutzt "bind" falsch. Schau dir am besten mal den Abschnitt "Event Formats" von dieser Seite an.

Re: Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 11:23
von kevind
Dann müsste es eigentlich so aussehen:

Code: Alles auswählen

e.bind("p",kev)
e.bind("+",kev)
e.bind("%",kev)
e.bind(",",kev)
wie würde ich zb nach "<" abfragen :) ?

Re: Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 12:21
von BlackJack
@kevind: Das steht auch in der verlinkten Dokumentation.

Re: Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 14:00
von nomnom
Wenn du "<" einfangen willst, brauchst du "<Key>" als Event und im Handler fragst du den "char" des Events ab:

Code: Alles auswählen

import tkinter

def foo(event):
    if event.char == "<":
        print("pressed")


if __name__ == '__main__':
    root = tkinter.Tk()
    e = tkinter.Entry(root)
    e.bind("<Key>", foo)
    e.pack()
    root.mainloop()

Re: Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 17:02
von BlackJack
@nomnom: Oder man nimmt für die '<'-Taste einfach den Wert der diese Taste erkennt und in der Dokumentation steht. Dann muss man '<' im Handler nicht gesondert behandeln.

Re: Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 17:50
von nomnom
BlackJack hat geschrieben:@nomnom: Oder man nimmt für die '<'-Taste einfach den Wert der diese Taste erkennt und in der Dokumentation steht. Dann muss man '<' im Handler nicht gesondert behandeln.
Das ist wohl besser, auch wenn eine magische Zahl zum Einsatz kommt. ;)

Re: Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 18:48
von BlackJack
@nomnom: Welche magische Zahl?

Re: Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 18:58
von nomnom
BlackJack hat geschrieben:@nomnom: Welche magische Zahl?
Hm, keine Ahnung. Ich denke mal, du meintest ursprünglich "<Key-<>"? Habe leider selber nicht ganz die Dokumentation gelesen. Tut mir leid!

Re: Tastaturbinding unter Linux

Verfasst: Samstag 27. Oktober 2012, 19:36
von BlackJack
@nomnom: Ich meinte '<less>'.

Re: Tastaturbinding unter Linux

Verfasst: Sonntag 28. Oktober 2012, 13:15
von nomnom
BlackJack hat geschrieben:@nomnom: Ich meinte '<less>'.
Ach das hab ich ja ganz außer Acht gelassen! Manchmal sieht man den Wald vor lauter Bäumen nicht. :)