gpt4 book ai didi

python - 试图在按住 tkinter 按钮时保持功能持续运行

转载 作者:太空宇宙 更新时间:2023-11-03 15:43:41 25 4
gpt4 key购买 nike

我目前在 tkinter 中有一个按钮,可以在释放按钮时运行一个函数。我需要按钮在整个按住按钮的过程中以一定的速率不断地添加到一个数字。

global var
var=1
def start_add(event,var):
global running
running = True
var=var+1
print(var)
return var

def stop_add(event):
global running
print("Released")
running = False
button = Button(window, text ="Hold")
button.grid(row=5,column=0)
button.bind('<ButtonPress-1>',start_add)
button.bind('<ButtonRelease-1>',stop_add)

我不一定需要在释放按钮时运行任何功能,如果有帮助,只需在按住按钮时运行。非常感谢任何帮助。

最佳答案

没有内置的东西可以做到这一点,但是制作你自己的 Button 可以很容易。你也在正确的轨道上,你唯一缺少的是你需要使用 after 来制作循环和 after_cancel 来停止循环:

try:
import tkinter as tk
except ImportError:
import Tkinter as tk

class PaulButton(tk.Button):
"""
a new kind of Button that calls the command repeatedly while the Button is held
:command: the function to run
:timeout: the number of milliseconds between :command: calls
if timeout is not supplied, this Button runs the function once on the DOWN click,
unlike a normal Button, which runs on release
"""
def __init__(self, master=None, **kwargs):
self.command = kwargs.pop('command', None)
self.timeout = kwargs.pop('timeout', None)
tk.Button.__init__(self, master, **kwargs)
self.bind('<ButtonPress-1>', self.start)
self.bind('<ButtonRelease-1>', self.stop)
self.timer = ''

def start(self, event=None):
if self.command is not None:
self.command()
if self.timeout is not None:
self.timer = self.after(self.timeout, self.start)

def stop(self, event=None):
self.after_cancel(self.timer)

#demo code:
var=0
def func():
global var
var=var+1
print(var)

root = tk.Tk()
btn = PaulButton(root, command=func, timeout=100, text="Click and hold to repeat!")
btn.pack(fill=tk.X)
btn = PaulButton(root, command=func, text="Click to run once!")
btn.pack(fill=tk.X)
btn = tk.Button(root, command=func, text="Normal Button.")
btn.pack(fill=tk.X)

root.mainloop()

如@rioV8 所述,after() 调用不是非常准确。如果您将超时设置为 100 毫秒,您通常可以预期两次调用之间的间隔为 100 - 103 毫秒。按住按钮的时间越长,这些错误就会越积越多。如果你想准确计算按钮被按下的时间,你需要一种不同的方法。

关于python - 试图在按住 tkinter 按钮时保持功能持续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51253345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com