图形布局
嗨,我在这里的第一篇文章!我是第一次试图找出问题的编码员。任何帮助都将得到深深的赞赏。
我试图通过更改四个标签的背景颜色("眨眼"(来创建一个"动画"。因此,这个想法是要以一个顺序眨眼几次,然后暂停以获取用户输入。此动画用户输入周期重复几次。
我尝试使用后方法来执行此操作。但是,一切都没有依次进行动画,而是在最后,一切都聚在一起并一起奔跑。换句话说,如果我尝试执行连续的动画,那么第一次动画在进入下一个动画之前就不会执行
本节是生成动画序列的地方。
self.genRandom(3) # generate random sequence of numbers
self.createSchedule(3) #relate the random sequence onto image on screen
self.doanim() #execute animation
self.delay=10000 #delay before beginning next animation
self.after(self.delay, self.genRandom(3))
self.after(self.delay, self.createSchedule(3))
self.after(self.delay, self.doanim())
计划生成(将序列编号与图像相关((延迟,标签颜色更改功能(
def createSchedule(self,seqn):
self.schedule.clear()
tuple=(2000, self.labelbegin)
self.schedule.append(tuple)
# (10, lambda: self.associateDigLogo())
for number in self.listSeqn:
# (10, lambda: self.associateDigLogo()
if number == 0:
self.schedule.extend(((1000,lambda: self.buttonpresswhatsapp(None)), (500, lambda: self.buttonreleasewhatsapp(None))))
elif number == 1:
self.schedule.extend(((1000, lambda: self.buttonpressslack(None)), (500, lambda: self.buttonreleaseslack(None))))
elif number == 2:
self.schedule.extend(((1000, lambda: self.buttonpressskype(None)), (500, lambda: self.buttonreleaseskype(None))))
elif number ==3:
self.schedule.extend(((1000, lambda: self.buttonpresssnapchat(None)), (500, lambda: self.buttonreleasesnapchat(None))))
本节是执行动画的地方
def doanim(self):
if len(self.schedule) <= 0:
return
self.sched_item = 0
s = self.schedule[self.sched_item]
#run the function stored in the schedule
print(s[0])
self.after(s[0], self.doanim_helper)
def doanim_helper(self):
s = self.schedule[self.sched_item]
# run the function stored in the schedule
s[1]()
self.sched_item += 1
print(self.sched_item)
if self.sched_item >= len(self.schedule):
self.after(1000, self.quit)
else:
s = self.schedule[self.sched_item]
self.after(s[0], self.doanim_helper)
图形函数的样本
def buttonpresswhatsapp(self, event):
self.whatsapplabel.config(bg="red")
def buttonreleasewhatsapp(self, event):
self.whatsapplabel.config(bg="white")
根据文档,当一个函数传递时,
在尝试呼叫之前对所有参数表达式进行评估
因此,在self.after(self.delay, self.genRandom(3))
中,函数调用self.genRandom(3)
立即评估,然后将其返回值传递给self.after
。这就是为什么"一切都在一起俱乐部"而缺乏预期的延迟的原因。
而是要将可呼叫(例如函数对象(作为第二个参数传递:
self.after(self.delay, lambda: self.genRandom(3))
self.after(self.delay, lambda: self.createSchedule(3))
self.after(self.delay, self.doanim)
self.genRandom
是一个函数。函数是一流的对象,可以将其作为参数传递给其他函数。在Python中,函数后的括号导致函数被调用。