LINUX.ORG.RU

Tkinter создание горячих клавиш

 , , ,


0

1

Как в Python 3 и Tkinter организовать горячие клавиши? Например при нажатии Ctrl+O выполнялась функция:

def openfile():
  file = tkinter.filedialog.askopenfile()
  if file != None:
      contents = file.read()
      text.insert('1.0', contents)
      file.close

★★

Как-то так:

root.bind("<Control-Key-o>", openfile)
где root — твое TK-шное окно. Только openfile должно быть с одним аргументом (его вполне можно игнорировать):
def openfile(event):
  ...

TeopeTuK ★★ ()
Последнее исправление: TeopeTuK (всего исправлений: 2)

Как в TKinter - не знаю, а в самом tk это команды bind и bindtag. Непосрественно акселераторы создаются командой bind, ты можешь привязать непосредственно к виджету или к «пакету сочетаний кнопок», который называется bindtag. Смысл bindtag-а - в том, что он позволяет задавать приоритеты для биндингов. Это важно, поскольку обработчик Ctrl-O сам по себе отловит и Ctrl-Shift-O, и Ctrl-Alt-O. Поэтому я завожу несколько биндтагов - DoubleMod${ИмяВиджета} для сочетаний с двумя модификаторами, например, для <Control-Shift-H>; SingleMod${ИмяВиджета} для сочетаний с одним, например, для <Control-Key-O>; и NoMod${ИмяВиджета} для простых кнопок, таких, как <Key-F1>. Далее биндтаги привызываются к виджету с помощью команды bindtag, и их приоритет - по порядку указания, т.е. сначала нужно поставиться DoubleMod, потом SingleMod, потом NoMod.

Дальнейшие нюансы: есть проблемы с кириллицей, у меня есть функция ::clcon_key::b , но она довольно сложная. Ещё хуже то, что в последних версиях они норвят сломать международные буквы вообще и будет невозможно отловить некие (не помню какие) сочетания с кириллицей - я пропатчил tk и пользуюсь своим, но мне не нравится эта ситуация. Если для тебя это актуально - спрашивай.

Вот один из моих файлов, но надо вообще тебе скачать весь исходник, т.к. там всё делается не напрямую, а через обёртки.

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 4)
Ответ на: комментарий от den73

И ещё: когда будешь делать работу с буфером обмена, прочитай сначала вот это: http://www.tcl.tk/man/tcl/TkCmd/options.htm#M-exportselection

Советую тщательно и везде эту возможность отключить. Если не хочешь - ты должен чётко понимать, в каком она у тебя состоянии, иначе буфер обмена у тебя будет работать очень и очень странно.

И ещё: обрати внимание на цифровую клавиатуру - она себя ведёт по-разному на разных устройствах и в разных ОС.

den73 ★★★★★ ()