Как мне добавить как событие, так и корень для обратного вызова в python tkinter?

#python #python-3.x #tkinter

#python #python-3.x #tkinter

Вопрос:

Я создаю базовое приложение с использованием tkinter и хочу разделить код для моего графического интерфейса и мой код для функций и прочего в разные файлы, но эта функция:

 from tkinter import *
from functions import * # this is my file I want to put my functions in

# FUNCTIONS that needs root and event
def callback(event): # my question is about this function
    root.after(50, select_all, event.widget)

# Setup
root = Tk()
  

(привязка)

 edtLocation1 = Entry(root)
edtLocation1.bind('<Control-a>', callback)
  

Необходимо одновременно принимать событие и root, если я перемещаю его в новый файл, но я не могу сделать это внутри другого файла:

 def callback(event, root): # gives error because I have to pass in an event
        root.after(50, select_all, event.widget)
  

Поскольку я не знаю, как передать событие…

Короче говоря, как я могу передать событие и root в обратный вызов?

Ответ №1:

Вы можете использовать лямбда:

 def callback(event, root):
    root.after(50, select_all, event.widget)

...

edtLocation1.bind('<Control-a>', lambda e: callback(e, root))
  

Ответ №2:

Вам не нужно передавать root. Вы можете вызвать after метод из любого виджета, и event объект, который передается, имеет ссылку на виджет, который перехватил событие.

 def callback(event):
    event.widget.after(50, select_all)