繁体   English   中英

tkinter 中的 After() 方法用于定时器

[英]After() method in tkinter for timer

当用户在我的数字点击游戏中第一次点击按钮时,我想启动一个计时器。 我尝试为此使用 after 方法,但是当我单击按钮时,计时器保持在 0。代码的 rest 工作正常,没有任何错误消息。 这是代码:

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()

在您的代码中, clock_started已初始化为True ,这意味着if not clock_started:这个条件将不会满足开始,因此计时器无法正常工作而不会给出错误。 您的最终click_event(event)应如下所示:

def click_event(event):
    global clock_started
    new_button = event.widget
    clicked_val = int(new_button["text"])
    clock_started = False
    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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM