0

我正在尝试生成一个线程,它会定期更改我的椭圆形画布的颜色,但不知何故,这段代码什么也没做:

from Tkinter import *

class Application(Frame):
    def laufer(self):
        self.canvas1.configure(fill='black')

    def bt_start(self):
        t = Thread(target=self.laufer)
        t.start()

    def createWidgets(self):    
        self.canvas1 = Canvas(self, width=50, height=50)
        self.canvas1.create_oval(10, 10, 50, 50, outline="black", 
            fill="green", width=1)
        self.canvas1.grid(row=3, column=0)
    [bt_start...]

更改填充颜色的正确方法是什么?

4

1 回答 1

2

要回答有关如何更改项目颜色的问题,您必须使用itemconfigure方法,给它您要配置的对象的 id,或者一个代表零个或多个要配置的对象的标签。

例如:

self.id = self.canvas1.create_oval(..., fill="green")
...
self.canvas1.itemconfigure(self.id, fill="black")

然而,还有更大的问题。您不能从主线程以外的任何线程与画布交互。它可能会起作用,但你的应用程序很有可能最终会崩溃。

有两种解决方案:首选的一种是,不要使用线程。它们增加了复杂性,而且很多时候你只是不需要它们。在问题中使用的程序类型中,线程是完全不需要的。

但是,如果您的程序确实需要线程,则普遍接受的解决方案是创建一个线程安全队列,让您的工作线程将某种数据发布到队列中,然后让您的主线程轮询队列定期安排对数据采取行动。

于 2013-05-24T13:51:54.203 回答