如何在tkinter

时间:2016-06-21 21:27:08

标签: python tkinter

Python初学者。
我需要一种在Python中显示一系列颜色的方法,我选择使用Tkinter来实现这一点 我设法有一个按钮,并在单击时更改它的背景颜色,但是当我做多个更改时,只渲染最后一个。

我几乎可以肯定这不是Tkinter本身的问题,而是Python本身处理函数的方式所以这可能已经在这里讨论了,但作为初学者我真的不知道该寻找什么。我想是正确的关键字就足够了。

from Tkinter import *
import time
class App:
    def __init__(self, master):
        self.slogan = Button(command=self.change)
        self.slogan.pack()

    def change(self):
        self.slogan.configure(bg = 'red')
        time.sleep(1)
        self.slogan.configure(bg = 'blue')

root = Tk()
app = App(root)
root.mainloop()

此代码应该在点击时将颜色更改为红色,等待并将颜色更改为蓝色,而不是仅将颜色更改为蓝色。

1 个答案:

答案 0 :(得分:2)

这是您的问题:

time.sleep(1)

永远不要睡在GUI程序中。它阻止主循环做任何事情(即更新你的图形)。它会冻结gui,也不会给你一秒钟的反应。

相反,将它分成两个回调,并且第一个时间表是另一个时间表,即:...

def change(self):
    self.slogan.configure(bg='red')
    self.slogan.after(1000, # milliseconds
                      self.change_back)

def change_back(self):
    self.slogan.configure(bg='blue')

此外,您的应用程序可能应该将主服务器传递给按钮(Button(master, command=self.change))和/或应该从Tkinter.Frame进行子类化,然后将按钮打包在其中。