Форум сайта python.su
Здравствуйте!
Есть такой код:
#!/usr/bin/python3 import tkinter as tk res=[0] tk_lst=[['1.0','1.4'],['1.5','1.10'],['1.11','1.15']] # Выделение терминов def select_term(): pos1=tk_lst[res[0]][0] pos2=tk_lst[res[0]][-1] txt.tag_add('terms',pos1,pos2) txt.tag_config('terms',background='cyan') # Перейти на предыдущий термин def move_left(event): txt.tag_remove('terms','1.0','end') if res[0] > 0: res[0]-=1 select_term() # Перейти на следующий термин def move_right(event): txt.tag_remove('terms','1.0','end') if res[0]+1 < len(tk_lst): res[0]+=1 select_term() root=tk.Tk() frame_txt=tk.Frame(root) frame_txt.pack() frame_panel=tk.Frame(root) frame_panel.pack() entry=tk.Entry(frame_panel) entry.pack(side='left') button_flag=tk.Button(frame_panel,text='Флаг') button_flag.pack(side='left') button_quit=tk.Button(frame_panel,text='Выйти') button_quit.pack(side='left') txt=tk.Text(frame_txt) txt.pack(expand=1,fill='both') txt.insert('1.0','Папа любит маму.') txt.config(state='disabled') txt.bind('<Left>',move_left) txt.bind('<Right>',move_right) txt.focus_force() root.mainloop()
Отредактировано vanvanov (Дек. 21, 2014 01:53:35)
Офлайн
import tkinter as tk res=[0] tk_lst=[['1.0','1.4'],['1.5','1.10'],['1.11','1.15']] # Выделение терминов def select_term(): pos1=tk_lst[res[0]][0] pos2=tk_lst[res[0]][-1] txt.tag_add('terms',pos1,pos2) txt.tag_config('terms',background='cyan') # Перейти на предыдущий термин def move_left(event): txt.tag_remove('terms','1.0','end') if res[0] > 0: res[0]-=1 select_term() # Перейти на следующий термин def move_right(event): txt.tag_remove('terms','1.0','end') if res[0]+1 < len(tk_lst): res[0]+=1 select_term() root=tk.Tk() frame_txt=tk.Frame(root) frame_txt.pack() frame_panel=tk.Frame(root) frame_panel.pack() button_flag=tk.Button(frame_panel,text='Флаг') button_flag.pack(side='left') entry=tk.Entry(frame_panel) entry.pack(side='left') button_quit=tk.Button(frame_panel,text='Выйти') button_quit.pack(side='left') txt=tk.Text(frame_txt) txt.pack(expand=1,fill='both') txt.insert('1.0','Папа любит маму.') txt.config(state='disabled') txt.bind('<Left>',move_left) txt.bind('<Right>',move_right) txt.bind('<Button 1>', lambda x: txt.focus()) txt.focus_force() root.mainloop()
Отредактировано terabayt (Дек. 21, 2014 02:36:11)
Офлайн
terabaytСпасибо! А Tkinter вообще позволяет переключаться между разными элементами с помощью Tab и Shift+Tab, если есть несколько Frame, а не один?txt.bind('<Button 1>', lambda x: txt.focus())
Офлайн
Вопрос лишен смысла. Вы можете сами указывать возможность получения фокуса (свойство takefocus). В результате Вы можете указать виджет, который никогда не получит фокуса, если явно на него не нажать. Кроме того, расположение виджетов в коде также отвечает за переход фокуса. Явно задавать переход фокуса можно функцией .focus_force(). Да и .bind никто не отменял
Офлайн
Что-то я стормозил. Чтобы перейти с search_field на txt, надо делать
txt.bind('<F6>',lambda x:search_field.focus()) search_field.bind('<F6>',lambda x:txt.focus())
txt.bind('<F6>',lambda x:txt.focus())
Офлайн