마우스 버튼을 누르면 0부터 세는 파이썬 스크립트를 만들려고합니다. 제 아이디어는 pyHook을 사용하여 마우스 왼쪽 버튼을 눌렀을 때 함수로 들어가고 왼쪽 마우스를 놓을 때 함수를 종료하는 것입니다. 나는 파이썬에 대해 매우 익숙하지 않기 때문에 나쁜 설명에 대해 유감스럽게 생각한다. 일부 의사 :Python : 마우스를 사용 중일 때 계산, 마우스가 멈 추면 위로 이동
import pyHook
import pythoncom
def termin():
return None
def counter(tell):
a=0
while True:
print a
a+=1
hm = pyHook.HookManager()
hm.SubscribeMouseLeftUp(termin)
hm = pyHook.HookManager()
hm.SubscribeMouseLeftDown(counter)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()
이 코드는하지만 나는 SubscribeMouseLeftUp은 이산 시간에 발생하기 때문에이 작동합니다 생각하지 않는다, 내 일반적인 생각이다. 내가 찾고있는 건 어쩌면 카운터 기능을 실행하고 일종의 스레딩 또는 다중 처리 모듈에서 함수를 종료하고 하나의 함수에서 조건을 사용하여 다른 실행중인 함수를 종료하는 것입니다. 하지만이 작업을 수행하는 방법을 잘 모르겠습니다.
이 좋아, 그래서 의지의 코멘트 후이 스크립트를 시도 :
이import pyHook,time,pythoncom
def counter(go):
for a in range(5):
time.sleep(1)
print a
return True
hm=pyHook.HookManager()
hm.SubscribeMouseLeftDown(counter)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()
willpower2727에서 허용 대답은 내가 지금까지 본 최고의 솔루션입니다. 그는 스레딩을 사용하여 자신의 솔루션을 게시하기 전에 나는 다음과 같은 코드를 만들어 :
from multiprocessing import Process,Queue
import pyHook
import time
import pythoncom
import ctypes
def counter(tellerstate,q):
while True:
a=0
tellerstate=q.get()
if tellerstate==1:
while True:
a+=1
print a
tellerstate=q.get()
if tellerstate==0:
break
time.sleep(0.1)
def mousesignal(q):
def OnDown(go):
tellstate=1
q.put(tellstate)
return None
def OnUp(go):
tellstate=0
q.put(tellstate)
return None
def terminate(go):
if chr(go.Ascii)=='q' or chr(go.Ascii)=='Q':
ctypes.windll.user32.PostQuitMessage(0)
hm.UnhookKeyboard()
hm.UnhookMouse()
q.close()
q.join_thread()
process_counter.join()
process_mousesignal.join()
return None
hm=pyHook.HookManager()
hm.KeyDown = terminate
hm.MouseLeftDown = OnDown
hm.MouseLeftUp = OnUp
hm.HookMouse()
hm.HookKeyboard()
pythoncom.PumpMessages()
if __name__ == '__main__':
tellerstate=0
q=Queue()
process_counter = Process(target=counter,args=(tellerstate,q))
process_mousesignal = Process(target=mousesignal,args=(q,))
process_mousesignal.start()
process_counter.start()
이 코드의 나의 예상되는 동작은 카운터와 mousesignal 기능을 별도의 프로세스를 실행해야한다는 것입니다. mousesignal 프로세스에서 마우스 입력을 기반으로 큐에 0 또는 1을 넣습니다. 카운터 함수는 계속 실행되고 Queue를 읽고 if 문을 사용하여이 함수에서 루프를 시작하고 종료합니다. 이 코드는 전혀 작동하지 않지만 이유를 이해할 수는 없습니다.
그냥 제안하면 pyhook 프로그램의 작동 예제를 얻은 다음 필요에 맞게 조정할 수 있습니다. 실습 예제가 있으면 훨씬 쉽게 도움이 될 것입니다. 이 예제를 시작할 수있는 장소로 제안합니다. https://gordoncluster.wordpress.com/2013/09/12/logging-all-keyboard-input-with-python-pyhook/ – willpower2727
작동 카운터 코드가 추가되었습니다. – mathiasxx94
마우스 단추가 누적 된 시간을 계산하는 데 관심이 있습니까? 아니면 다른 계산 방법? – willpower2727