Python Tkinter画布更新

问题描述:

我想更新python 2中Tkinter中的一个圆的颜色。我可以创建我的圆,但颜色不会在我的task()方法中更新,直到我停止运行该程序。 val大于4时,如何才能更新颜色?Python Tkinter画布更新

from Tkinter import * 
m = Tk() 
w = Canvas(m, width = 100, height = 100) 
w.pack() 
cir = w.create_oval(50, 50, 100, 100) 

def task(): 
    while True: 
     val += 1 
     if val > 4: 
      w.itemconfig(cir, fill = "blue") 

m.after(2000, task) 
m.mainloop() 
+1

你有'while true:'没有'break'。你期望什么? – TigerhawkT3

+0

我在第一次写错了代码,但即使使用此修补程序,它仍然不会更新颜色 – Brosten

+0

您仍然有'while True:'没有'break'。再次,你期望什么? – TigerhawkT3

这将工作。

Like @ TigerhawkT3表示您需要休息才能退出循环。

from Tkinter import * 
m = Tk() 
w = Canvas(m, width = 100, height = 100) 
w.pack() 
cir = w.create_oval(50, 50, 100, 100) 

def task(): 
    val = 1 
    while True: 
     val += 1 
     if val > 4: 
      w.itemconfig(cir, fill = "blue") 

      #without the break task will run forever 
      break 

m.after(2000, task) 
m.mainloop() 
+0

OP在一个现在被删除的答案中评论说,即使在改变填充颜色后,他也想继续递增'val'(虽然没有解释为什么)。 – TigerhawkT3

恐怕你不得不这么做,唯一的办法。 代码:

from tkinter import * 

m = Tk() 

c = Canvas(root, width=100, height=100) 
c.pack() 

v = 4 

if v == 4: 
    v = 0 
    c.pack_forget() 
    del c 

    c = Canvas(root, width=100, height=100, bg='blue') 
    c.pack() 

c.mainloop() 

是否所有的用v变化(我还没有把在虽然)! 希望这有助于!

+0

等等,我不是说v,我的意思是val,对不起! – Guydangerous99