我正在尝试创建一个测验(基于GUI)。我想在我的代码中插入一个计时器,即测验只有30秒,之后程序终止一条消息。我怎样才能做到这一点?我正在使用Tkinter。 我使用的是python 2.7版本。
答案 0 :(得分:2)
用
启动计时器a_timer=root.after(some_ms_seconds,some_method)
将在时间结束后调用some_method()
例如,如果你想做一个倒数计时器
foo = StringVar()
foo.set(30)
a_time_label = Label(root,textvariable=foo)
def decrement_label():
foo.set(str(int(foo.get())-1))
root.after(1000,decrement_label)
然后你可以用
来阻止它root.cancel_after(a_timer) #cancel the timers call back
如果您需要更多帮助,则必须更新您的问题
因为我在这里感觉特别慷慨
from Tkinter import Tk, Button,Label,StringVar,LEFT,RIGHT,BOTTOM,TOP
import tkMessageBox
import random
class MyButton:
def __init__(self,root,label,**config):
self.text_var = StringVar()
self.text_var.set(label)
self.btn = Button(root,textvariable=self.text_var,**config)
def SetLabel(self,label,**config):
self.text_var.set(label)
self.btn.configure(**config)
def GetLabel(self):
return self.text_var.get()
def __getattr__(self,attr):
return getattr(self.btn,attr)
class MyQuiz:
def check_button(self,btn):
if btn.cget("bg") == "green":
tkMessageBox.showinfo("WINNER!!!","You picked the right one!")
return True
else:
tkMessageBox.showinfo("Sorry no Luck","You picked the WRONG one!")
def on_button(self,button_index):
self.root.after_cancel(self.timer)
if self.check_button(self.buttons[button_index]):
self.buttons[button_index].configure(bg="red")
self.buttons[random.randint(0,2)].configure(bg="green")
self.timer_text.set("30")
self.timer = self.root.after(1000,self.on_timer)
def on_timer(self):
time_left = int(self.timer_text.get()) - 1
if time_left <= 0:
tkMessageBox.showinfo("Out of Time!","You Ran Out Of Time!!!")
else:
self.timer_text.set(str(time_left))
self.timer = self.root.after(1000,self.on_timer)
def __init__(self):
self.root = root = Tk()
self.timer_text=StringVar()
self.timer_text.set("30")
self.label1 = Label(self.root,text="Pick The Right One")
self.label2 = Label(self.root,textvariable=self.timer_text)
self.label1.pack(side=TOP)
self.label2.pack(side=RIGHT)
self.buttons = [MyButton(root,"Button1",bg="green",command=lambda:self.on_button(0)),
MyButton(root,"Button2",bg="red",command=lambda:self.on_button(1)),
MyButton(root,"Button3",bg="red",command=lambda:self.on_button(2)),]
self.buttons[0].pack(side=TOP)
self.buttons[1].pack(side=TOP)
self.buttons[2].pack(side=TOP)
self.timer = root.after(1000,self.on_timer)
self.root.mainloop()
MyQuiz()