Python 如何更新Tkinter窗口的屏幕(画布)
我已经找了很多遍,还没有找到答案 我已经追踪并将我的问题简化为这个例子Python 如何更新Tkinter窗口的屏幕(画布),python,user-interface,tkinter,Python,User Interface,Tkinter,我已经找了很多遍,还没有找到答案 我已经追踪并将我的问题简化为这个例子 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, he
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
meth中的paintGui行仅显示代码正在工作,当obj.var为False时,它将变为红色
我的问题是原来的窗户——它下面的那扇仍然是蓝色的
我可以关闭原来的窗口,留下新窗口,但这不必要
所以我有两个问题:
我如何解决这个问题?
我已经尝试过跟踪和更新_idletaskes,但它们似乎都不起作用,尽管我可能使用了错误的方法
这里有什么问题?
我认为特金特是在一个循环中。当我更改var的值时,它是否应该循环并重新绘制屏幕,并将obj.var==False评估为True?每次调用paintGui时,它都会创建一个全新的窗口。这是因为您正在调用Tk,创建新的小部件,并运行新的主循环。这些事情只需要发生一次,所以将它们从paintGui函数中删除
这个代码的最小修改版本可以满足您的需要
from Tkinter import *
class A:
def __init__(self):
self.var = True
obj = A()
def meth():
obj.var = False
paintGui()
def paintGui():
if obj.var == False:
w.itemconfig("rect", fill="red")
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)
mainloop()
每次调用paintGui,它都会创建一个全新的窗口。这是因为您正在调用Tk,创建新的小部件,并运行新的主循环。这些事情只需要发生一次,所以将它们从paintGui函数中删除
这个代码的最小修改版本可以满足您的需要
from Tkinter import *
class A:
def __init__(self):
self.var = True
obj = A()
def meth():
obj.var = False
paintGui()
def paintGui():
if obj.var == False:
w.itemconfig("rect", fill="red")
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)
mainloop()
非常感谢你。这基本上解决了问题+1和接受答案!非常感谢你。这基本上解决了问题+1和接受答案!