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()
此代码应该在点击时将颜色更改为红色,等待并将颜色更改为蓝色,而不是仅将颜色更改为蓝色。
答案 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进行子类化,然后将按钮打包在其中。