python - 自动点击器代码不起作用(第一个项目)
问题描述
我正在尝试使用 pynput 制作一个自动点击器作为我的第一个项目,但我很难理解为什么我的代码不起作用。该代码用于在我点击“ctrl + alt + i”并每 1 秒点击一次时开始/停止点击。这是我当前的代码。我真的不明白为什么它不起作用,但到目前为止我所做的是“click_thread.running”正在从 true 变为 false,python 听我的键盘,并且点击只有在我设置时才有效“ClickMouse ”类中的“self.running”为真。我从打印“click_thread.running”中得到的输出似乎从真变为假,但如果发生这种情况,那么为什么不开始点击?我想这与它是“threading.Thread”的子类有关吗?还是我把课弄错了?不管怎样,我已经为此工作了几天,我觉得我已经撞到了墙,试图独自解决这个问题。非常感谢任何帮助!
import time
import threading
from pynput.mouse import Button, Controller
from pynput import keyboard
delay = 1
button = Button.left
class ClickMouse(threading.Thread):
def __init__(self, delay, button):
super().__init__()
self.delay = delay
self.button = button
self.running = False
def run(self):
while self.running == True:
mouse.click(self.button)
time.sleep(self.delay)
def start_clicking(self):
self.running = True
def stop_clicking(self):
self.running = False
mouse = Controller()
click_thread = ClickMouse(delay, button)
click_thread.start()
def on_activate_i():
print('<ctrl>+<alt>+i pressed')
if click_thread.running == False:
click_thread.start_clicking()
else:
click_thread.stop_clicking()
print(click_thread.running)
with keyboard.GlobalHotKeys({'<ctrl>+<alt>+i': on_activate_i,}) as h:
h.join()
解决方案
只要您调用click_thread.start()
,处理程序就会在新线程中start
调用您的函数。run
那时,self.running
是False
。因此,您的 while 循环将立即退出,线程将结束。
所以,设置running=True
为默认值,直到on_activate_i
.
你在哪里点击?随意?
推荐阅读
- android - 为什么我得到 java.lang.NoSuchFieldError: No static field xxxx of type I in class Lpl/myapp/mobile/main/BR; 或其超类?
- mysql - 如何以非root用户身份运行mysql?
- azure - 每个实例的 Web 套接字和 IP 连接有什么区别?
- javascript - Discord.js v12 提到作为机器人前缀
- javascript - 如何在 *ngFor 中的数组元素之间放置逗号?
- javascript - 带路由器的可滑动 Vuetify 选项卡
- flutter - 如何正确构建 Flutter 设计
- django - 初级问题 Django 3.0:基于类的视图
- xamarin.forms - 糟糕的榜单表现
- python - Python - 在每个 X 插入表后添加空闲时间(使用 API)