[python] TkInter / widget Text / tag_bind: svázání s klávesami nefunguje
petrofF
petr0ff na seznam.cz
Čtvrtek Červen 24 15:53:42 CEST 2010
Zatímco objekt <Text> svázaný s klávesami/myší funguje bez problémů,
u tagů mi to pracuje správně jen u myši:
text.tag_bind('tagA', '<Double-1>', echo) ...apod.
U kláves by měl reagovat callback svázaný s tím tagem, ve kterém právě
došlo k zápisu klávesy
Není tomu tak ...o tom, který tag (a zda vůbec nějaký) bude použit,
rozhoduje pozice kurzoru myši v okamžiku klávesové události (Press/
Release)
Příklad:
[zapisuji do tagu A]
KEY=1 (myš mimo tagy):
<nic>
KEY=2 (myš nad tagem B):
txt.get(2.0,3.0) = [LAST TAG]
KEY=3 (myš nad tagem A):
txt.get(1.0,2.0) = [FIRST TAG] 123
[Použitý kód]
from Tkinter import *
root = Tk()
def odezva(txt,tagName):
range = txt.tag_ranges(tagName)
content = txt.get(range[0],range[1])
print "txt.get(%s,%s) = %s" % (range[0],range[1],content)
text = Text(font=('courier', 15, 'normal'))
text.pack(expand=YES, fill=BOTH)
text.tag_config('A', background='purple')
text.tag_config('B', background='yellow')
text.tag_bind('A', '<KeyRelease>', lambda event: odezva(text,'A'))
text.tag_bind('B', '<KeyRelease>', lambda event: odezva(text,'B'))
text.insert('1.0', '[FIRST TAG] \n', 'A')
text.insert('2.0', '[LAST TAG] \n', 'B')
text.insert('3.0', '---bez tagu---')
text.mark_set(INSERT, '1.0+13char') # Cursor v tagu A
text.focus_set()
root.mainloop()
Další informace o konferenci Python