当我单击条目窗口小部件时,我正在尝试启动计时器,但是我不知道如何做。
我有一个加载tk窗口的程序,一旦窗口打开,计时器就会启动。我有一个重置计时器的按钮,但是我希望它能使计时器仅在我在输入框中单击时才启动。 我还设置了绑定设置,以便在我按Enter键时将文本传递到函数中并进行打印。
from tkinter import *
from tkinter import messagebox
counter = 0
def counterlabel(label):
def count():
global counter
counter += 1
label.config(text=str(counter))
label.after(1000, count)
count()
def game(*args):
x = entry.get()
print(x)
def reset(label):
global counter
counter = 0
label.config(text=str(counter))
root = Tk()
root.title("hello")
quit = Button(root, command=lambda: root.destroy())
quit.pack()
label = Label(root)
label.pack()
button = Button(
root, text="hit me to reset timer",
command=lambda: reset(label))
button.pack()
entry = Entry(root)
entry.bind("<Return>", game)
entry.pack()
counterlabel(label)
root.mainloop()
答案 0 :(得分:0)
为什么不将Entry
小部件与带有计数器的<Button-1>
序列绑定,所以当用户单击Entry
小部件时,计时器启动,其余时间按您的编程。
尝试一下:
entry.bind( "<Button-1>",lambda e: counterlabel(label) )
我也不知道为什么要使此功能如此复杂,以防万一,如果以后有其他计划要在功能中添加更多代码,则可以只使一个功能而不是其中一个功能。
可能就是这个
def count(evt=None):
global counter
counter += 1
label.config(text=str(counter))
label.after(1000, count)
...
root=Tk()
...
entry.bind( "<Button-1>", count) )
要在按下按钮时停止计时器
为此,您必须获取after()
函数的ID并将其传递给after_cancel(id)
函数(id = after(1000, count)
)。当您点击Entry
时,它将重新开始。
这是完整的代码
from tkinter import *
from tkinter import messagebox
counter = 0
timer_id = None
def count(evt=None):
global counter, timer_id
entry.unbind('<Button-1>') # So the timer won't go crazy on multiple presses.
counter += 1
label.config(text=str(counter))
timer_id = label.after(1000,count)
def game(*args):
x=entry.get()
print(x)
def reset(label):
global counter
counter=0
if timer_id: label.after_cancel(timer_id)
entry.bind('<Button-1>', count) # When reset the user can start again
label.config(text=str(counter))
root=Tk()
root.title("hello")
quit=Button(root,command=lambda: root.destroy())
quit.pack()
label=Label(root, text='0')
label.pack()
button=Button(root,text="hit me to reset timer",command=lambda: reset(label))
button.pack()
entry=Entry(root)
entry.bind("<Return>", game)
entry.bind('<Button-1>', count)
entry.pack()
root.mainloop()
希望这对您有帮助