有没有人知道这里出了什么问题,我没有在控制台窗口中出现任何错误,点击事件有效,但它只是改变了时间而且实际上从来没有在这里打勾是我的代码......
编辑 - 编译并运行正常,当您单击标签时,文本将更改为计时器并应开始打勾。点击事件工作正常,你可以点击标签然后变成特定的开始时间4:59但冻结并且不会打勾。
from Tkinter import *
from time import *
from Queue import *
from threading import *
class exp_timer(Frame):
def __init__(self):
c = Frame.__init__(self)
self.master.title("Exp Bonus")
self.master.geometry("350x250")
self.five_exp = Label(c,text = "5% exp")
self.five_exp.grid(row=0,column=0)
self.five_exp.bind("<Button-1>",self.five_exp_click)
self.minutes = 4
self.sec = 59
def my_label_timer(minutes,sec):
sec -= 1
if sec < 60:
sec -= 1
if sec == 0:
sec = 59
minutes -=1
if minutes == 0 and sec == 0:
return self.five_exp.configure(text="5% exp")
def five_exp_start(self):
self.five_exp.configure(text = "{0}:{1:02}".format(self.minutes,self.sec))
self.five_exp.update()
self.minutes = self.my_label_timer(self.minutes)
self.sec = self.my_label_timer(self.sec)
def five_exp_click(self,event):
self.five_exp.configure(self.five_exp_start())
self.five_exp.update()
exp_timer().mainloop()
答案 0 :(得分:0)
您的代码存在很多问题,因此我已经为您重新安装了代码。
这应该符合您的需求:
class exp_timer(Frame):
def __init__(self):
c = Frame.__init__(self)
self.master.title("Exp Bonus")
self.master.geometry("350x250")
self.label = Label(c, text="start")
self.label.grid(row=0, column=0)
self.label.bind("<Button-1>",self.label_click)
self.running = False
def label_click(self,event):
if not self.running:
self.start()
def start(self):
self.running = True
self.minutes = 5
self.sec = 0
self.tick()
def tick(self):
self.sec -= 1
if self.sec < 0:
self.sec = 59
self.minutes -=1
if self.minutes >= 0 and self.sec >= 0:
self.label.configure(text = "{0}:{1:02}".format(self.minutes, self.sec))
self.after(1000, self.tick)
else:
self.label.configure(text="start")
self.running = False
exp_timer().mainloop()
特别是:
self
和minutes
sec
after
的召唤)running
属性处理my_label_timer
函数做了很奇怪的事情,你不能一次用一个参数调用一个双参数函数。