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