如何更新Tkinter wind的屏幕(画布)

2024-10-01 07:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经搜索了相当广泛,但没有找到答案。在

我已经找到并将我的问题归结为这个例子。在

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是{}时,它就变成红色了。在

我的问题是原来的窗户(它下面的那个)还是蓝色的。在

我可以把原来的窗户弄坏,留下新的,但那不应该是必要的。在

所以我有两个问题:

  • 我怎么解决这个问题?在

我试过after()和{},但是它们似乎都不起作用,尽管我可能使用的不正确。在

  • 这里有什么问题?在

我以为特金特被认为是个圈套。当我更改var的值时,它是否应该循环并重新绘制屏幕并将obj.var == False计算为True?在


Tags: rectselfmasterfalsetrueobjvardef
1条回答
网友
1楼 · 发布于 2024-10-01 07:38:31

每次您调用paintGui,它都在创建一个全新的窗口。这是因为您正在调用Tk(),创建新的小部件,并运行一个新的mainloop。这些事情只需要发生一次,所以将它们从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()

相关问题 更多 >