Метод bind() привязывает событие к какому-либо действию (нажатие кнопки мыши, нажатие клавиши на клавиатуре и т.д.). bind принимает три аргумента:
Синтаксис связывания:
- название события;
- функцию, которая будет вызвана при наступлении события;
- третий аргумент (необязательный) — строка «+» — означает, что эта привязка добавляется к уже существующим. Если третий аргумент опущен или равен пустой строке — привязка замещает все другие привязки данного события к виджету.
Синтаксис связывания:
виджет.bind(событие, функция)
Типы событий
При вызове метода bind() событие передается в качестве первого аргумента. Название события заключается в кавычки, а также в знаки < и >. Событие описывается с помощью зарезервированных последовательностей ключевых слов.
События мыши
К событиям мыши относятся следующие события (часто используемые):
- <Button-1> — щелчок левой кнопки мыши.
- <Button-2> — щелчок средней кнопки мыши.
- <Button-3> — щелчок правой кнопки мыши.
- <Double-Button-1> — двойной клик левой кнопки мыши.
- <Motion> — движение мыши.
Пример программы с событиями мыши:
from tkinter import *
def b1(event):
root.title("Левая кнопка мыши")
def b3(event):
root.title("Правая кнопка мыши")
def move(event):
root.title("Движение мышью")
# создаем главное окно программы
root = Tk()
root.title("Заголовок окна программы")
root.minsize(width=500, height=400)
root.bind('<Button-1>', b1)
root.bind('<Button-3>', b3)
root.bind('<Motion>', move)
root.mainloop()
События клавиатуры
К событиям клавиатуры относят следующие:
- Нажатия буквенных клавиш, которые записываются без угловых скобок, например ‘A’;
- Нажатия комбинаций клавиш — пишутся через тире, например, <Control-Shift>
- Для неалфавитных клавиш есть специальные зарезервированный слова:
- <Return> — Enter;
- <space> — пробел;
- <Shift> — Shift;
- <Alt> — Alt;
- <Control> — Ctrl;
- и т.д.
Для примера напишем небольшую программу. В окне будет поле ввода и метка. При нажатии Enter метод caption будет устанавливать текст метки-по введенному в поле тексту.
При нажатии Ctrl + Z будет произведен выход(вызван метод destroy() для основного окна, что означает выход из программы). Листинг:
from tkinter import *
def exit_(event):
root.destroy()
def caption(event):
t = ent.get()
lbl.configure(text = t)
root = Tk()
root.title("Заголовок окна программы")
root.minsize(width=500, height=400)
# Создаем виджеты
ent = Entry(root, width = 100)
lbl = Label(root, width = 100)
# Располагаем виджеты
ent.pack()
lbl.pack()
ent.bind('<Return>', caption)
root.bind('<Control-z>', exit_)
root.mainloop()
Вывод программы:
Видео по теме:
Программа «Просмотрщик файлов»
Для закрепления теоретического материала напишем небольшую программу, которая будет выводить содержимое текстового файла в многострочное поле для ввода текста. Программа будет состоять всего из трех виджетов:
- Поле ввода — в него нужно ввести имя файла;
- Кнопка;
- Многострочное поле ввода — в него будет загружаться содержимое файла при нажатии кнопки.
Листинг программы:
from tkinter import *
def output(event):
# получаем содержимое текстового поля
s = ent.get()
try:
txt = open(s, "r", encoding="utf-8")
content = txt.read()
tex.delete(1.0, END)
tex.insert(END, content)
except:
tex.delete(1.0, END)
tex.insert(END, "Файл не существует!")
root = Tk()
root.title("Просмотрщик файлов")
root.minsize(width=500, height=400)
# создаем виджеты
ent = Entry(root, width=20)
but = Button(root, text="Открыть")
tex = Text(root, width=80, height=30, font="Courier 14", wrap=WORD)
tex.insert(END, "Введите имя текстового файла и нажмите кнопку Открыть")
# распологаем виджеты в окне программы
ent.grid(row=0, column=0)
but.grid(row=2, column=0)
tex.grid(row=1, column=0)
# устанавливаем обработчик событий
but.bind("<Button-1>", output)
# запускаем программу
root.mainloop()
Программа работает так:
Метод delete() очищает текущее содержимое.
Метод insert() добавляет новое содержимое.
1.0 означает первую строку и первый символ (нумерация символов начинается с 0), END — последний символ.
Расположением виджетов в окне программы «занимается» сетка — grid.
Вывод программы:
- После запуска она ждет пока пользователь введет имя файла и нажмет кнопку «Открыть». Имя файла будет получено из переменной ent.
- Если файл существует, его содержимое будет загружено в виджет tex.
- Если файл не существует, в tex будет загружено соответствующее сообщение.
Метод delete() очищает текущее содержимое.
Метод insert() добавляет новое содержимое.
1.0 означает первую строку и первый символ (нумерация символов начинается с 0), END — последний символ.
Расположением виджетов в окне программы «занимается» сетка — grid.
Вывод программы:
Видео по созданию программы: