Python tkinter中计时器的After()方法
我想在我的数字点击游戏中,当用户第一次点击按钮时启动计时器。我尝试使用after方法进行此操作,但当我单击按钮时,计时器保持在0。代码的其余部分工作正常,没有任何错误消息。 代码如下:Python tkinter中计时器的After()方法,python,tkinter,timer,Python,Tkinter,Timer,我想在我的数字点击游戏中,当用户第一次点击按钮时启动计时器。我尝试使用after方法进行此操作,但当我单击按钮时,计时器保持在0。代码的其余部分工作正常,没有任何错误消息。 代码如下: import tkinter as tk from random import randint # create window window = tk.Tk() window.title('Clicker') # create list for random numbers new_list = [] #
import tkinter as tk
from random import randint
# create window
window = tk.Tk()
window.title('Clicker')
# create list for random numbers
new_list = []
# define time count:
def time_event():
global current_time, after_id
if clock_started:
current_time += 1
clock["text"] = str(current_time)
after_id = clock.after(1000, time_event)
# define click event
def click_event(event):
global clock_started
new_button = event.widget
clicked_val = int(new_button["text"])
clock_started = True
if not clock_started:
clock_started = True
clock.after(1000, time_event)
if clicked_val == new_list[0]:
del new_list[0]
new_button["state"] = tk.DISABLED
if len(new_list) == 0:
clock.started = False
clock.after_cancel(after_id)
# create buttons
for i in range(25):
new_num = randint(1, 999)
while i in new_list:
new_num = randint(1, 999)
new_list.append(new_num)
new_list.sort()
new_button = tk.Button(window, text=new_num)
new_button.grid(column=i // 5, row=i % 5)
new_button.bind("<Button-1>", click_event)
# create clock
current_time = 0
clock = tk.Label(window, text=str(current_time))
clock.grid(column=2, row=6)
clock_started = False
# run game
window.mainloop()
将tkinter作为tk导入
从随机导入randint
#创建窗口
window=tk.tk()
window.title('Clicker'))
#创建随机数列表
新列表=[]
#定义时间计数:
def time_事件():
全局当前\u时间,在\u id之后
如果时钟u启动:
当前时间+=1
时钟[“文本”]=str(当前时间)
after\u id=时钟。after(1000,time\u事件)
#定义单击事件
def点击事件(事件):
全局时钟已启动
新建按钮=event.widget
单击了[u val=int(新建按钮[“文本”])
时钟启动=真
如果时钟未启动:
时钟启动=真
时钟后(1000,时间事件)
如果单击_val==新建_列表[0]:
删除新列表[0]
新建按钮[“状态”]=tk.DISABLED
如果len(新列表)=0:
clock.start=False
取消后时钟(id后)
#创建按钮
对于范围(25)内的i:
new_num=randint(1999)
当我在新列表中时:
new_num=randint(1999)
新增列表。追加(新增数量)
新建_list.sort()
新建按钮=tk.按钮(窗口,文本=新建数量)
新建按钮网格(列=i//5,行=i%5)
新建按钮。绑定(“,单击事件)
#创建时钟
当前时间=0
时钟=tk.标签(窗口,文本=str(当前时间))
时钟网格(列=2,行=6)
时钟启动=错误
#跑步比赛
window.mainloop()
在您的代码中,clock\u start
已初始化为True
,这意味着如果不clock\u start:将无法满足此条件,因此计时器在不给出错误的情况下无法工作。您最后的单击事件(event)
应该如下所示:
def点击事件(事件):
全局时钟已启动
新建按钮=event.widget
单击了[u val=int(新建按钮[“文本”])
时钟启动=错误
如果时钟未启动:
时钟启动=真
时钟后(1000,时间事件)
如果单击_val==新建_列表[0]:
删除新列表[0]
新建按钮[“状态”]=tk.DISABLED
如果len(新列表)=0:
clock.start=False
取消后时钟(id后)
我发现了一个逻辑错误,请在初始化时将此clock\u start=True
更改为clock\u start=False
,否则程序将不会执行任何操作,因为它认为时钟已经启动。