Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Метод bind привязывает событие к какому-либо действию (нажатие кнопки мыши, нажатие клавиши на клавиатуре и т.д.). bind принимает три аргумента:
Метод bind возвращает идентификатор привязки, который может быть использован в функции unbind.
Обратите внимание, что если bind привязан к окну верхнего уровня, то Tkinter будет обрабатывать события всех виджетов этого окна (см. также bind_all ниже).
Функция, которая вызывается при наступлении события, должна принимать один аргумент. Это объект класса Event, в котором описано наступившее событие. Объект класса Event имеет следующие атрибуты (в скобках указаны события, для которых этот атрибут установлен):
Эта функция может возвращать строки «continue» и «break». Если функция возвращает «continue» то Tkinter продолжит обработку других привязок этого события, если «break» - обработка этого события прекращается. Если функция ничего не возвращает (если возвращает None), то обработка событий продолжается (т.е. это эквивалентно возвращению «continue»).
Есть три формы названия событий. Самый простой случай это символ ASCII. Так описываются события нажатия клавиш на клавиатуре:
widget.bind("z", callback)
callback вызывается каждый раз, когда будет нажата клавиша «z».
Второй способ длиннее, но позволяет описать больше событий. Он имеет следующий синтаксис:
<modifier-modifier-type-detail>
Название события заключено в угловые скобки. Внутри имеются ноль или более модификаторов, тип события и дополнительная информация (номер нажатой клавиши мыши или символ клавиатуры) Поля разделяются дефисом или пробелом. Пример (привязываем одновременное нажатие Ctrl+Shift+q):
widget.bind("<Control-Shift-KeyPress-q>", callback)
(в данном примере KeyPress можно убрать).
Третий способ позволяет привязывать виртуальные события - события, которые генерируются самим приложением. Такие события можно создавать самим, а потом привязывать их. Имена таких событий помещаются в двойные угловые скобки: «Paste». Есть некоторое количество уже определённых виртуальных событий.
Здесь перечислены все возможные типы событий, для самых часто используемых дано описание. Более подробно см. man bind.
Полный список см. man keysyms.
<Button-1> или <1> - нажата левая клавиша мыши.
<Alt-Motion> - движение мышью с нажатой на клавиатуре клавишей Alt.
<Key> - нажатие любой клавиши на клавиатуре.
from Tkinter import * root=Tk() def leftclick(event): print u'Вы нажали левую кнопку мыши' def rightclick(event): print u'Вы нажали правую кнопку мыши' button1=Button(root, text=u'Нажми') button1.pack() button1.bind('<Button-1>', leftclick) button1.bind('<Button-3>', rightclick) root.mainloop()
from Tkinter import * def callback(e): print u'Нажата кнопка', e.widget['text'] root=Tk() button1 = Button(root, text='1') button1.pack() button2 = Button(root, text='2') button2.pack() root.bind_class('Button', '<1>', callback) root.mainloop()
Пример, меняем порядок обработки привязок на обратный:
from Tkinter import * def callback1(e): print 'callback1' def callback2(e): print 'callback2' def callback3(e): print 'callback3' def callback4(e): print 'callback4' root=Tk() button = Button(root) button.pack() button.bind('<1>', callback1) root.bind_class('Button', '<1>', callback2) root.bind('<1>', callback3) root.bind_all('<1>', callback4) button.bindtags(('all', root, 'Button', button)) root.mainloop()
from tkinter import * from tkinter import messagebox colors = { 'Красный':'#ff0000', 'Оранжевый':'#ff7d00', 'Желтый':'#ffff00', 'Зеленый':'#00ff00', 'Голубой':'#007dff', 'Синий':'#0000ff', 'Фиолетовый':'#7d00ff' } def callback(event, color, code): e.focus() if event.keycode == 13: if e.get() == "Белый": colors["Белый"] = "#FFFFFF" e['bg'] = colors[e.get()] else: print(event) e.delete(0, END) e.insert(0, color) root=Tk() root.geometry("400x300") e = Entry(root, justify=CENTER, font="Arial 15") e.pack(fill=X, expand=1, padx=10, pady=10) e.bind("<Button-3>", lambda event, color="Белый", code="#FFFFFF": callback(event, color, code)) e.bind("<Key>", lambda event, color="Белый", code="#FFFFFF": callback(event, color, code)) for color, code in colors.items(): b = Button(root, bg=code) b.pack(fill=X) b.bind("<Button-1>", lambda event, color=color, code=code: callback(event, color, code)) b.bind("<Button-3>", lambda event, color="Белый", code="#FFFFFF": callback(event, color, code)) root.mainloop()