提问人:grasshide 提问时间:11/16/2023 最后编辑:grasshide 更新时间:11/16/2023 访问量:57
双击 For 循环
double click in for loop
问:
我有一个简单的 python 程序,它从 for 循环中读取隐藏设备的输入。 我不想为单个按钮实现不同的操作(长按、单按、双按、按三重按)。
我的解决方案的问题在于,与我见过的所有其他解决方案相比,我的循环只有在按下按钮时才会被触发。这意味着我不能简单地调用具有时间限制的函数,因为我永远不会触发单击。
我想我需要一个线程。但我不确定,也不知道我该怎么做。 任何帮助都值得赞赏!
这是我尝试过的:
clicked = False
def set_clicked():
global clicked
clicked = True
click_registered = False
click_time = time.time()
def click_handler():
global click_registered, clicked, click_time
if click_registered and time.time() - click_time > 0.35:
click_registered = False
print("single")
if clicked:
if click_registered:
if time.time() - click_time < 0.35:
click_registered = False
print("double")
else:
click_registered = True
clicked = False
click_time = time.time()
for event in device.read_loop(): # loops forever
if event.code == 1: # button pressed
set_clicked()
click_handler()
如果单击后有其他操作,则不会触发循环,单击也不会触发。
我想出了以下几个作为检测双击的可能解决方案。但这仍然感觉不太对劲。有人对此有优雅的解决方案吗?
import threading
import time
press_count = 0
def thread_function(name):
global press_count
start_time = time.time()
while time.time() - start_time < 0.35:
if press_count == 2:
press_count = 0
print("double")
return
print("single")
press_count = 0
return
for n in range(3):
if len(threading.enumerate()) >= 1:
press_count+=1
if len(threading.enumerate()) == 1:
t = threading.Thread(target=thread_function, args=(1,))
t.start()
if n == 0:
time.sleep(0.5)
if n == 1:
time.sleep(0.1)
答: 暂无答案
评论
click_handler()
select()