У меня есть задача: обеспечить навигацию в окне Tkinter по тексту. При этом стрелка влево выделяет слово, стоящее до текущего, соответственно, стрелка вправо выделяет слово, стоящее после текущего. Вот упрощенный код:
#!/usr/bin/python3 import tkinter as tk elem='тест' max_elems=1001 text=(elem+' ')*max_elems text=text[:-1] pos_lst=[] pos2=-2 for i in range(max_elems): pos1=pos2+2 pos2=pos1+len(elem)-1 pos_lst+=[[pos1,pos2]] def move_right(event): if res[0] < len(pos_lst)-1: res[0]+=1 select_term() def move_left(event): if res[0] > 0: res[0]-=1 select_term() def select_term(): if len(pos_lst) > 0: pos1=pos_lst[res[0]][0] pos1='1.'+str(pos1) pos2=pos_lst[res[0]][1] pos2='1.'+str(pos2+1) txt.tag_remove('cur_term','1.0','end') txt.tag_add('cur_term',pos1,pos2) txt.mark_set('insert',pos2) txt.tag_config('cur_term',background='cyan',font='Sans 14') txt.yview('insert') root=tk.Tk() res=[0] frame=tk.Frame(root) frame.pack() txt=tk.Text(frame) txt.focus_set() txt.insert('end',text) txt.mark_set('insert','1.0') txt.yview('1.0') txt.config(state='disabled') txt.pack(expand=1) select_term() txt.bind('<Left>',move_left) txt.bind('<Right>',move_right) root.wait_window() root.mainloop()
Я так понимаю, задача решается, если определить, сколько символов помещается на экране. Но как это определить?