python - 单击条目小部件时如何启动计时器

标签 python tkinter timing

我试图在单击条目小部件时启动计时器,但我不知道如何执行此操作。

我有一个程序可以加载 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/

相关文章:

python - 如何将带有参数的Python装饰器实现为类?

python - Wagtail 'View live' 按钮在使用 id 作为 slug 时创建页面后提供错误的 url

python - 如何使用 Tkinter 清除整个 Treeview

javascript - jquery 中两个事件之间的正确时间记录

objective-c - 呈现 Renderbuffer 时导致执行时间波动的原因是什么? (OpenGL)

python - 在 matplotlib 中用两个 Y 轴(两个单位)绘制单个数据

python - 有没有办法在 python 中合并语句 if 和 as ?

python-3.x - 在 tkinter 文本小部件中左右对齐字符串

python - Python Tkinter 中.xxxxxxx 的含义是什么

jquery - jQuery,CSS3动画和计时问题