Чтобы ответить на конкретный вопрос «Как вызвать событие TkInter из отдельного объекта», используйте команду event_generate
. Это позволяет вводить события в очередь событий корневого окна. В сочетании с мощным механизмом виртуальных событий Tk он становится удобным механизмом передачи сообщений.
Например:
from tkinter import *
def doFoo(*args):
print("Hello, world")
root = Tk()
root.bind("<<Foo>>", doFoo)
# some time later, inject the "<<Foo>>" virtual event at the
# tail of the event queue
root.event_generate("<<Foo>>", when="tail")
Обратите внимание, что вызов event_generate
будет немедленно возвращен. Непонятно, хочешь ты этого или нет. Вообще говоря, вы не хотите, чтобы программа, основанная на событиях, блокировала ожидание ответа на конкретное событие, потому что она остановит графический интерфейс .
Я не уверен, что это решит вашу проблему; не видя твой код, я не уверен, в чем твоя настоящая проблема. Я могу, например, получить доступ к методам root в конструкторе объекта, в который передается root без блокировки приложения. Это говорит мне, что в вашем коде происходит что-то еще.
Вот пример успешного доступа к методам в корневом окне из некоторого другого объекта:
from tkinter import *
class myClass:
def __init__(self, root):
print("root background is %s" % root.cget("background"))
root = Tk()
newObj = myClass(root)