python - 如何阻止我的 python 脚本变得无响应?
问题描述
我对编程真的很陌生,我试图利用我的知识制作一个自动点击应用程序,在按下 f6 时反复点击鼠标左键。我在 Mac 上编写和运行代码。我的问题是一切正常,但是当我释放 f6 时,它确实停止按预期单击,但应用程序窗口随后变得无响应并且需要强制退出。有什么办法可以解决这个问题,因为它严重限制了功能?
import tkinter as tk
from pynput.keyboard import Key, Listener
import pyautogui
def clicker():
def on_press(key):
if key == Key.f6:
pyautogui.click(button='left')
def on_release(key):
if key == Key.esc:
# Stop listener
return False
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
window = tk.Tk()
button = tk.Button(
master=window,
text='click me',
command=clicker,
height=10,
width=20
)
button.pack()
window.mainloop()
更新代码:
import threading
import tkinter as tk
from pynput.keyboard import Key, Listener
import pyautogui
def helper():
h = threading.Thread(target = clicker, daemon=True)
h.start()
def clicker():
def on_press(key):
if key == Key.f6:
pyautogui.click(button='left')
def on_release(key):
if key == Key.esc:
# Stop listener
return False
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
window = tk.Tk()
title = tk.Label(
master = window,
text = 'Autoclicker'
)
button = tk.Button(
master=window,
text='click me',
command=helper,
height=10,
width=20
)
button.pack()
title.pack()
window.mainloop()
解决方案
您可以将该方法作为一个新线程启动:
import _thread
def helper():
# helper function for thread call
_thread.start_new_thread(clicker)
这将使主线程离开mainloop
并应防止窗口冻结。
推荐阅读
- leaflet - 圆形标记 - 基于缩放值的大小传单
- assembly - 如何获取引导扇区中 nasm 汇编指令的大小?
- html - 跨越多列的文本
- python - python枚举函数获取索引错误
- python-3.x - 如何在熊猫数据框列中找到大于 1 的 value_counts() 长度
- email - 从付费帐户发送带有附件的电子邮件时,MailApp.sendEmail 无法正常工作
- r - 如何将变量从闪亮加载到全局环境?
- jquery - jQuery测验(多选,输入)
- mysql - 空闲后带有Node.js初始查询的Mysql需要很长时间才能执行后续查询是即时的
- javascript - 通过R中的串扰使用选择框在R plotly图中选择默认值,使用静态html不闪亮