参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。
在Python中,要实现按ESC键退出整个程序,同时确保当子线程完成时也能正常退出,可以使用线程同步机制(如Event
对象)以及主线程监听键盘中断。下面是一个修改后的示例:
import threading
import time
import keyboard
# 创建一个事件对象用于线程间通信
stop_event = threading.Event()
def print_digital(stop_event):
for i in range(100):
if stop_event.is_set(): # 检查停止事件是否被触发
break
print(i)
time.sleep(0.1)
t = threading.Thread(target=lambda: print_digital(stop_event), daemon=True) # 将stop_event传入目标函数
t.start()
try:
keyboard.wait('esc')
except KeyboardInterrupt: # 处理Ctrl+C等其他可能的中断信号
pass
# 当检测到ESC按键按下时,设置停止事件
stop_event.set() # 告诉子线程结束循环
# 确保子线程有机会结束
t.join()
print("程序退出")
这样,当用户按下ESC键时,主线程会通过设置stop_event
来通知子线程终止循环,然后等待子线程结束(通过调用t.join()
),最后程序才会完全退出。如果子线程先于ESC按键结束,那么主线程在调用keyboard.wait('esc')
后也会自然地继续执行并退出程序。