Ответ 1
Чтобы ответить на ваш конкретный вопрос "Как вы вызываете событие 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
будет немедленно возвращен. Не понятно, что вы хотите или нет. Вообще говоря, вы не хотите, чтобы программа, основанная на событиях, блокировала ожидание ответа на конкретное событие, потому что она заморозит графический интерфейс.
Я не уверен, что это решает вашу проблему; не видя своего кода, я не уверен, какова ваша настоящая проблема. Я могу, например, получить доступ к корням в конструкторе объекта, где корневой каталог передается без блокировки приложения. Это говорит мне, что в вашем коде есть что-то еще.
Здесь приведен пример успешного доступа к методам в корневом окне из другого объекта:
from tkinter import *
class myClass:
def __init__(self, root):
print("root background is %s" % root.cget("background"))
root = Tk()
newObj = myClass(root)