Библиотека Tkinter: События

Метод 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.confogure(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()

Вывод программы:


Библиотека Tkinter: События

Программа “Просмотрщик файлов”

Для закрепления теоретического материала напишем небольшую программу, которая будет выводить содержимое текстового файла в многострочное поле для ввода текста. Программа будет состоять всего из трех виджетов:

  • Поле ввода – в него нужно ввести имя файла;
  • Кнопка;
  • Многострочное поле ввода – в него будет загружаться содержимое файла при нажатии кнопки.

Листинг программы:

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()

Программа работает так:

  • После запуска она ждет пока пользователь введет имя файла и нажмет кнопку “Открыть”. Имя файла будет получено из переменной ent.
  • Если файл существует, его содержимое будет загружено в виджет tex.
  • Если файл не существует, в tex будет загружено соответствующее сообщение.

Метод delete() очищает текущее содержимое.

Метод insert() добавляет новое содержимое.

1.0 означает первую строку и первый символ (нумерация символов начинается с 0), END – последний символ.

Расположением виджетов в окне программы “занимается” сетка – grid.

Вывод программы:


Библиотека Tkinter: События

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Библиотека Tkinter: ttk.

Библиотека Tkinter: ttk.

ttk (themed tk) – это расширение tcl/tk с новым набором виджетов. В ttk используется новый движок для создания виджетов. Этот движок обладает поддержкой тем и

 
Библиотека Tkinter: Изображения.

Библиотека Tkinter: Изображения.

Для работы с изображениями в Tkinter имеется два класса BitmapImage и PhotoImage. BitmapImage представляет собой простое двухцветное изображение, PhotoImage – полноцветное изображение. BitmapImage Конструктор класса

 
Библиотека Tkinter: Упаковщики.

Библиотека Tkinter: Упаковщики.

Упаковщик (менеджер геометрии, менеджер расположения) это специальный механизм, который размещает (упаковывает) виджеты на окне. В Tkinter есть три упаковщика: pack, place, grid. В одном виджете

 
Библиотека Tkinter: Методы виджетов.

Библиотека Tkinter: Методы виджетов.

Все виджеты в Tkinter обладают некоторыми общими методами. В этой статье мы познакомимся с такими методами. Список всех виджетов можно изучить в статье “Библиотека Tkinter:

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: