我试图在单击条目小部件时启动计时器,但我不知道如何执行此操作。
我有一个程序可以加载 tk 窗口,并且一旦窗口打开,计时器就会启动。我有一个重置计时器的按钮,但我希望拥有它,以便计时器仅在我单击输入框内时启动。 我还进行了绑定(bind)设置,以便当我按 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()
最佳答案
为什么不绑定(bind)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()
希望这有帮助
关于python - 单击条目小部件时如何启动计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55881099/