我正在撰寫一個腳本,該腳本將監聽按鍵,直到按下'q'鍵,之后它應該停止腳本并列印出以2秒為間隔保存的滑鼠位置。我不能管理這些執行緒,我還在學習這個課題。每次我運行這段代碼時,什么都沒有發生,但行程卻在運行:
from pynput.keyboard import Listener
import pyautogui
from multiprocessing import process
import時間
mouse_positions = []
def func1()。
while True:
time.sleep(2)
mouse_positions.append(pyautogui.position())
cordinates = []
quit_status = False[/span]。
按鍵 = []
def on_press(key)。
if "q" in str(key)。
print('q被按下!')
exit("停止運行")
#qprint(key)。
keystrokes.append(key)
print(keystrokes)
#print(keystrokes)(按鍵)。
if __name__ == '__main__'/span>:
p1 = Process(target=func1)
p1.start()
p1.join()
with Listener(on_press=on_press) as Listener: # 創建一個Listener的實體。
listener.join() # 將監聽器執行緒加入主執行緒,以繼續等待按鍵。
編輯。 對任何感興趣的人來說,這是我建立的一個點擊宏,我之前建立的腳本更像是滑鼠捕捉運動。下面的腳本將記錄你的滑鼠點擊,之后將重放它們。好多了。
from pynput.keyboard import Listener
import pyautogui
from pynput import mouse
import 時間
x_pos = []
y_pos = []
both_pos = []
pressed_key = None[/span]。
def on_click(x, y, button, pressed) 。
if pressed。
#print ("{0} {1}".format(x,y))。
print(pressed_key)
if pressed_key == "1"/span>:
both_pos.append("{0}".format(x,y))
both_pos.append("{1}".format(x,y))
#print("test" x_pos y_pos)。
print (x_pos y_pos)
else:
pass.
if pressed_key == 'q'/span>:
return False: return False
def on_press(key)。
print("要回放按'q',要停止錄音按'1',要再次錄音按'1'。")
global pressed_key
if 'Key.esc' in str(key)。
return False(key).
if '1' in str(key)。
pressed_key= None if pressed_key == '1'/span> else '1'/span>
if 'q' in str(key):
print("replaying actions")
print(str(len(both_pos)>)
for point in range(0, len(both_pos),2)。)
time.sleep(3)
print("clicking")
pyautogui.click(x=int(both_pos[point]),y=int(both_pos[point 1] )
print(" done...")
return False False
mouse_listener = mouse.Listener(on_click=on_click)
mouse_listener.start()
with Listener(on_press=on_press) as listener: # 創建一個Listener的實體。
listener.join()
#print(mouse_listener.mouse_positions)
uj5u.com熱心網友回復:
你好,你可以使用threading模塊。
我已經創建了MouseListener類,該類繼承于threading.Thread類。所有你想運行的東西都放在run方法中。作為執行緒停止器,我使用still_run屬性。
當你打字時,我把按下的鍵和mouse_listener傳給on_press函式。如果q被按下,我將mouse_listener.still_run設定為False,這將導致停止滑鼠監聽器。
mouse_positions我從全域范圍移到了MouseListener。
import threading
from pynput.keyboard import Listener
import pyautogui
import 時間
class MouseListener(threading.Thread)。
still_run = True[/span]。
mouse_positions = []
def run(self)。
self.func()
def func(self)。
while self.still_run。
time.sleep(2)
self.mouse_positions.append(pyautogui.position())
print(self.mouse_positions)
坐標 = []
quit_status = False(自已的滑鼠位置)
按鍵 = []
def on_press(key, mouse_listener)。
print('kp'/span>)
if "q" in str(key):
print('q被按下!')
mouse_listener.still_run = False(span class="hljs-string">'q was pressed!
print(key)
exit("Stopped running")
keystrokes.append(key)
print(keystrokes)
print(keystrokes)
if __name__ == '__main__'/span>:
mouse_listener = MouseListener()
mouse_listener.start()
with Listener(on_press=lambda key: on_press(key, mouse_listener) as listener: # 創建一個Listener的實體。
listener.join()
print(mouse_listener.mouse_positions)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/325309.html
標籤:
