Я довольно много искал и не нашел ответа.
Я выследил и свел свою проблему к этому примеру.
from Tkinter import *
class A:
def __init__(self):
self.var = True
obj = A()
def meth():
obj.var = False
paintGui()
def paintGui():
master = Tk()
w = Canvas(master, width=200, height=100)
w.pack()
w.create_rectangle(50, 25, 150, 75, fill="blue", tags="rect")
btn = Button(master, text="Cerrar Mesa",command=meth)
btn.pack(side=BOTTOM)
if obj.var == False:
w.itemconfig("rect", fill="red")
mainloop()
paintGui()
Как видите, прямоугольник имеет условное значение itemconfig
.
Линия paintGui()
внутри meth()
предназначена только для того, чтобы показать, что код работает, и когда obj.var
равен False
, он становится красным.
Моя проблема в том, что исходное окно (то, что под ним) все еще синее.
Я мог бы убить исходное окно и оставить новое, но в этом нет необходимости.
Итак, у меня есть 2 вопроса:
- Как мне решить эту проблему?
Я пробовал after()
и update_idletaskes
, но, похоже, ни один из них не работает, хотя я могу использовать неправильно.
Я думаю, что Ткинтер был в петле. Когда я изменяю значение var
, не должно ли оно зацикливаться, перекрашивать экран и оценивать obj.var == False
как True
?