问题描述
好的,所以我正在制作一个自动点击器,到目前为止一切都很好 - 有点。它在 PyCharm 终端和 IDLE 中完美运行,但是当双击 .py 文件时,它会按预期打开 windows 终端,但只单击一次。单击键盘上的任何键后,它会继续并在同一位置停止,然后我必须在再次启动之前单击键盘上的一个键,然后它会继续执行此操作。我使用 pyinstaller 转换为 exe,并且转换得很好,但是当我运行它时,它根本不起作用。请有人帮忙解决这个问题。
import time
mouse = Controller()
clicker_on_query = True
clicker_time_interval = 1
while clicker_on_query == True:
print('loop activated')
mouse.press(Button.left)
mouse.release(Button.left)
print('1')
time.sleep(clicker_time_interval)
print('loop end')
解决方法
经过一些测试,我意识到只有在命令提示符下运行脚本时才会发生这种情况,而使用 PowerShell 似乎根本没有问题。 您可以尝试使用这段代码,它使用类更高级,并具有开始/停止键,也许还可以进行更多实验。
顺便说一下,这似乎也适用于提示。
import time
import threading
from pynput.mouse import Button,Controller
from pynput.keyboard import Listener,KeyCode
delay = 1.00
button = Button.left
start_stop_key = KeyCode(char='s')
exit_key = KeyCode(char='e')
class ClickMouse(threading.Thread):
def __init__(self,delay,button):
super(ClickMouse,self).__init__()
self.delay = delay
self.button = button
self.running = False
self.program_running = True
def start_clicking(self):
self.running = True
def stop_clicking(self):
self.running = False
def exit(self):
self.stop_clicking()
self.program_running = False
def run(self):
while self.program_running:
while self.running:
mouse.click(self.button)
time.sleep(self.delay)
time.sleep(0.1)
mouse = Controller()
click_thread = ClickMouse(delay,button)
click_thread.start()
def on_press(key):
if key == start_stop_key:
if click_thread.running:
click_thread.stop_clicking()
else:
click_thread.start_clicking()
elif key == exit_key:
click_thread.exit()
listener.stop()
with Listener(on_press=on_press) as listener:
listener.join()