Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter中的item.config一起执行_Python_Tkinter - Fatal编程技术网

Python Tkinter中的item.config一起执行

Python Tkinter中的item.config一起执行,python,tkinter,Python,Tkinter,我使用Tkinter在python2.7中编写代码。 我需要一组矩形来一个接一个地改变颜色。但是,当我在函数中一个接一个地编写item.config时,它们会在执行结束时一起执行 def button(self): print "hi" self.canvas.itemconfig(self.figure1, fill="green") time.sleep(3) print "hello" sel

我使用Tkinter在python2.7中编写代码。 我需要一组矩形来一个接一个地改变颜色。但是,当我在函数中一个接一个地编写item.config时,它们会在执行结束时一起执行

 def button(self):        
        print "hi"
        self.canvas.itemconfig(self.figure1, fill="green")
        time.sleep(3)
        print "hello"
        self.canvas.itemconfig(self.figure2, fill="green")
        time.sleep(3)
        print "okay"
        time.sleep(3)
        self.canvas.itemconfig(self.figure3, fill="green")
当我运行这个程序时,所有的打印语句都完成了,然后三个数字一起改变颜色。我需要在执行/打印每个语句时一个接一个地更改它

我不熟悉Python和Tkinter。为什么会发生这种情况,有什么建议和想法吗?
谢谢

下面是一个简单的示例,演示如何在保持Tk事件循环运行的同时执行一系列操作来延迟事件。我只有Python3,因此您可能需要稍微修改才能使用Python2.7

#!/usr/bin/python

from tkinter import *

def toggle(canvas, items):
    if len(items) > 0:
        canvas.itemconfigure(items[0], fill="green")
        canvas.after(1000, lambda: toggle(canvas, items[1:]))
    return

root = Tk()
canvas = Canvas(root, background="white")
canvas.pack(fill='both', expand=True)
figure1 = canvas.create_rectangle(10,10,80,80, fill="red")
figure2 = canvas.create_rectangle(100,10,180,80, fill="red")
figure3 = canvas.create_rectangle(200,10,280,80, fill="red")
canvas.after(1000, lambda: toggle(canvas, [figure1, figure2, figure3]))
root.mainloop()

保持事件循环运行是至关重要的。除非创建工作线程,否则不能在GUI应用程序中使用
sleep
。通常情况下,你不需要这样做。
after
调用将任务放入UI事件队列,以便您稍后运行,如果您捕获after令牌,您甚至可以取消它们(例如,如果您需要某个超时功能)。

感谢您的输入!但是如果我想在两个切换函数调用之间执行一些步骤,比如说print语句,那么颜色变化似乎同时发生。root=Tk()canvas=canvas(root,background=“white”)canvas.pack(fill='both',expand=True)figure1=canvas.create_rectangle(10,80,80,fill=“red”)figure2=canvas.create_rectangle(100,10180,80,fill=“red”)图3=canvas.create_rectangle(200,10280,80,fill=“red”)canvas.after(1000,lambda:toggle(canvas,[figure1])打印“hello”canvas.after(1000,lambda:toggle(canvas,[figure2])root.mainloop()@AbinayaSegar您将
之后的
调用设置为1000,因此这两个调用都将在一秒钟后执行。试着将第二次的时间设置为2000。请记住,对
after
的调用会立即返回,并计划稍后执行任务,因此两个after调用和print语句几乎会同时执行。哦!非常感谢你的帮助!我假设在上一个语句后1000毫秒执行。现在我明白了:)