Как передать какие-то значения в функцию обработчик событий?
Для обработки событий использую этот пример:
from tkinter import *
root = Tk()
def keys(event):
if event.keycode==88: # Клавиша с буквой Ч и с англ. буквой X
print("Ура! Вы нажали Ctrl-Ч! (Или Ctrl-X)")
root.bind("<Control-KeyPress>",keys)
root.mainloop()
Надо сделать так, чтобы в функцию обработки событий можно было передать значение переменной
Пробовал добавить переменную в def keys(event): и в root.bind("<Control-KeyPress>",keys), но тогда начинает писать что не хватает event.
Как можно передать в функцию обработки событий(keys) какие-то значения или как получить значение event, необходимое для этой функции?
Ответы (2 шт):
Вместо передачи ссылки на функцию, нужно использовать другую функцию, что вызовет первую, например лямбду.
В my_value будет значение "123":
from tkinter import *
root = Tk()
def keys(event, my_value):
if event.keycode==88: # Клавиша с буквой Ч и с англ. буквой X
print("Ура! Вы нажали Ctrl-Ч! (Или Ctrl-X)")
root.bind("<Control-KeyPress>", lambda event: keys(event, "123"))
root.mainloop()
События можно перехватывать с помощью lambda event: и потом вставлять в обработчик.
Пример: from tkinter import * root = Tk()
btn = Button(root, text='Открыть окно', command = lambda: new_window())#Кнопка для открытия окна
btn.pack()
#Функция открытия окна
def new_window():
self = Toplevel()
self.focus_force()
self.bind("<Control-KeyPress>", lambda event: keys(event, self))#`lambda event:` перехватывает событие и передаёт его в обработчик вместе с self
#Обработчик события
def keys(event, self):
if event.keycode==88: # Клавиша с буквой Ч и с англ. буквой X
print("Ура! Вы нажали Ctrl-Ч! (Или Ctrl-X)")
print('Закрытие окна')
self.destroy()#Удаление окна
root.mainloop()