Событие при нажатии кнопки python

Tkinter
Examples

Events in tkinter are all the command inputs that can happen inside your application such as mouse movements / clicks, keyboard entries, window resizes, widget introduction, the list goes on. Generally there are two types of events, those which are built into a widget and those which are explicitly bound to a widget.

Implicit Events

Some widgets have events built into them such as the Button widget which takes a command= argument. When we click the button, the callable in our command parameter will be called. Some other widgets with built in event bindings (via command= ) are:

  • Checkbutton — called on selection
  • Radiobutton — called on selection
  • Scale — called on update (movement of scale widget)
  • Scrollbar — called on update (movement of scrollbar)
  • Spinbox — called on update (new value selected)

Explicitly-Bound Events

There are many events which can be bound to any widget with the syntax: widget.bind(«», callable_handler) . This causes the specified handler to get called whenever the event occurs. Note that we can also bind events to our container objects such as Tk, Frame, & TopLevel

Binding Options

There are multiple ways to bind events to widgets in tkinter :

  • .bind() — bind to the specific widget only (instance binding)
  • .bind_class() — bind to the all widgets of this class (class binding)
  • .bind_all() — bind across the whole application (application binding)
Читайте также:  Python datetime сложение дат

Be aware that .bind_class() can get in the way of default widget behavior since this is how tkinter itself implements default behaviors for widgets. The preferred method is creating a widget class that inherits from the base class and configures a bind on instantiation.

class BoundButton(tkinter.Button): def __init__(self, master, **kw): apply(tkinter.Button.__init__, (self, master), kw) self.bind("", lambda event: print(event)) 

Declaring Callables

When we declare callables to act as event handlers we should take note that the triggering event will pass an event object (see below) into our callable function. This means we should define our event handlers with one parameter. Implicit events sometimes have the additional argument.

def keyboard_handler(event): print(event.char) def mouse_handler(event): print(event.x, event.y) print(event.char) # prints ?? 

Note that we can also pass callables directly into the .bind() function using lambdas.

root.bind("k", lambda event: print("k was pressed!")) 

The Event Object

The event object passed into our event-handlers has many attributes. Some of the commonly used ones are:

  • widget — the widget which generated the event
  • type — the type of event this is (equal to inner text of the event specifier)
  • x, y — the position of the mouse relative to the bound widget (mouse events only)
  • num — the mouse button pressed (mouse events only)
  • char — the pressed key as a character literal (keyboard events only)
  • keycode, keysym — the pressed key as a code or symbol (keyboard events only)

Источник

Событие при нажатии кнопки python

Tkinter позволяет обрабатывать события виджетов. Для обработки распространенных и наболее используемых событий Tkinter предоставляет интерфейс команд. Например, для обработки нажатия на кнопку ее параметру command надо передать функцию, которая будет вызываться при нажатии на кнопку

def click(): print("Hello") btn = ttk.Button(text="Click", command=click)

Ряд виджетов также позволяют с помощью параметра command задать обработчик для одного из событий данного виджета.

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

  • Activate : окно становится активным.
  • Deactivate : окно становится неактивным.
  • MouseWheel : прокрутка колеса мыши.
  • KeyPress : нажатие клавиши на клавиатуре.
  • KeyRelease : освобождение нажатой клавиши
  • ButtonPress : нажатие кнопки мыши.
  • ButtonRelease : освобождение кнопки мыши.
  • Motion : движение мыши.
  • Configure : изменение размера и положения виджета
  • Destroy : удаление виджета
  • FocusIn : получение фокуса
  • FocusOut : потеря фокуса.
  • Enter : указатель мыши вошел в пределы виджета.
  • Leave : указатель мыши покинул виджет.

Привязка событий

Для привязки события к виджету применяется метод bind() :

В качестве первого параметра указывается обрабатываемое событие, а в качестве второго — функция, которая обрабатывает событие.

Например, обработаем события получения и потери фокуса для кнопки:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def entered(event): btn["text"] ="Entered" def left(event): btn["text"] ="Left" btn = ttk.Button(text="Click") btn.pack(anchor=CENTER, expand=1) btn.bind("", entered) btn.bind("", left) root.mainloop()

Название событие передается в угловных скобках, например, «» или «». Для события Enter (получение фокуса) определен обработчик-функция entered, которая изменяет текст кнопки:

def entered(event): btn["text"] ="Entered"

Стоит обратить внимание, что функция обработки события должна принимать в качестве параметра объект события — в примере выше параметр event, даже если он в самой функции не используется.

Событие потери фокуса связывыется с функцией left:

Привязка событий в виджетах к функциям в tkinter и python

Кроме обычных событий некоторые виджеты Tkinter могут использовать виртуальные события или высокоуровневые события (выше были описаны низкоуровневые события), которые помещаются в двойные угловные скобки, например, событие выделения списка «>». Наиболее используемые виртуальные события будут рассмотрены в соответствующих темах про виджеты.

Шаблон события

В примере выше при привязке события указывалось только имя события например, «» или «». Но в реальности в угловых скобках указывается не просто имя события, а его шаблон. Шаблон события имеет следующую форму:

Модификаторы события

Часто используемые модификаторы:

  • Alt : нажата клавиша Alt
  • Control : нажата клавиша Ctrl
  • Shift : нажата клавиша Shift
  • Any : нажата любая клавиша

Клавиши

Также в шаблоне можно указать конкретные клавиши или комбинации. Некоторые из них:

  • Alt_L : левая клавиша alt
  • Alt_R : правая клавиша alt
  • BackSpace : клавиша backspace
  • Cancel : клавиша break
  • Caps_Lock клавиша CapsLock
  • Control_L : левая клавиша control
  • Control_R : правая клавиша control
  • Delete : клавиша Delete
  • Down : клавиша ↓
  • End : клавиша end
  • Escape : клавиша esc
  • Execute : клавиша SysReq
  • F1 : клавиша F1
  • F2 : клавиша F2
  • Fi : функциональная клавиша Fi
  • F12 : клавиша F12
  • Home : клавиша home
  • Insert : клавиша insert
  • Left : клавиша ←
  • Linefeed : клавиша Linefeed (control-J)
  • KP_0 : клавиша 0
  • KP_1 : клавиша 1
  • KP_2 : клавиша 2
  • KP_3 : клавиша 3
  • KP_4 : клавиша 4
  • KP_5 : клавиша 5
  • KP_6 : клавиша 6
  • KP_7 : клавиша 7
  • KP_8 : клавиша 8
  • KP_9 : клавиша 9
  • KP_Add : клавиша +
  • KP_Begin : центральная клавиша (5)
  • KP_Decimal : клавиша точка ( . )
  • KP_Delete : клавиша delete
  • KP_Divide : клавиша /
  • KP_Down : клавиша ↓
  • KP_End : клавиша end
  • KP_Enter : клавиша enter
  • KP_Home : клавиша home
  • KP_Insert : клавиша insert
  • KP_Left : клавиша ←
  • KP_Multiply : клавиша ×
  • KP_Next : клавиша PageDown
  • KP_Prior : клавиша PageUp
  • KP_Right : клавиша →
  • KP_Subtract : клавиша —
  • KP_Up : клавиша ↑
  • Next : клавиша PageDown
  • Num_Lock : клавиша NumLock
  • Pause : клавиша pause
  • Print : клавиша PrintScrn
  • Prior : клавиша PageUp
  • Return : клавиша Enter
  • Right : клавиша →
  • Scroll_Lock : клавиша ScrollLock
  • Shift_L : левая клавиша shift
  • Shift_R : правая клавиша shift
  • Tab : клавиша tab
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def single_click(event): btn["text"] ="Single Click" def double_click(event): btn["text"] ="Double Click" btn = ttk.Button(text="Click") btn.pack(anchor=CENTER, expand=1) btn.bind("", single_click) btn.bind("", double_click) root.mainloop()

Здесь в шаблоне «» ButtonPress — название события — нажатие кнопки мыши, а «1» указывает на конкретную кнопку — левую кнопку мыши (например, 3 — представляет правую кнопку)

А в шаблоне «» добавляется модификатор Doubles , который указывает на двойное нажатие.

Глобальная регистрация события

В примерах выше обработка события устанавливалась для одного конкретного объекта — для одной кнопки. Но что, если у нас много кнопок и мы хотим, чтобы для всех была установлена привязка одного и тоже события с одной и той же функцией_обработчиком? В этом случае мы можем установить привязку события глобально ко всем объектам класса с помощью метода bind_class класса Tk:

from tkinter import * from tkinter import ttk clicks = 0 root = Tk() root.title("METANIT.COM") root.geometry("250x200") def clicked(event): global clicks clicks = clicks + 1 btn["text"] =f" Clicks" btn = ttk.Button(text="Click") btn.pack(anchor=CENTER, expand=1) # привязка события к кнопкам ttk.Button root.bind_class("TButton", "", clicked) root.mainloop()

В данном случае для кнопок для обработки двойного нажатия установаливается обработчик — функция clicked. Причем события привязывается к кнопкам из пакета tkinter.ttk, поэтому в качестве типа виджетов используется «TButton» (а не просто Button).

Удаление события

Для открепления события от виджета вызывается метод unbind() , в который передается шаблон события:

Источник

Оцените статью