Печать при нажатой мыши

#python #loops #mouse

#python #циклы #мышь

Вопрос:

я использую PyMouse (событие) для определения, нажата ли кнопка мыши:

 from pymouse import PyMouseEvent

class DetectMouseClick(PyMouseEvent):
    def __init__(self):
        PyMouseEvent.__init__(self)

    def click(self, x, y, button, press):
        if button == 1:
            if press:
                print("click")
        else:
            self.stop()

O = DetectMouseClick()
O.run()
  

Это работает до сих пор, но теперь я хочу выполнять цикл print("click") до тех пор, пока мышь больше не будет нажата… я пытался:

 def click(self, x, y, button, press):
    if button == 1:
        if press:
            do = 1
            while do == 1:
                print("down")
                if not press:
                    do = 0
  

И еще кое-что. Нравится:

 while press:
    print("click")
  

Кто-нибудь может мне помочь? Спасибо!

Комментарии:

1. Я не думаю, что вы можете, так как сама мышь не отправляет постоянный поток «щелчков» при нажатии кнопки. Это механическая «проблема», не связанная с программным обеспечением. РЕДАКТИРОВАТЬ: вместо этого вы должны попробовать использовать джойстик 😉

Ответ №1:

Я думаю, что, как указывает Оли в своем комментарии, нет постоянного потока щелчков, когда кнопка мыши удерживается нажатой, поэтому вам нужно будет иметь print цикл. while Выполнение цикла в том же потоке предотвращает запуск события щелчка при отпускании мыши, поэтому единственный способ, который я могу придумать для достижения того, что вам нужно print("click") , — это использовать отдельный поток.

Я не программист на Python, но у меня была проблема, которая работает на моей машине (Python 2.7 в Windows 8.1):

 from pymouse import PyMouseEvent
from threading import Thread

class DetectMouseClick(PyMouseEvent):
    def __init__(self):
        PyMouseEvent.__init__(self)

    def print_message(self):
        while self.do == 1:
            print("click")

    def click(self, x, y, button, press):
        if button == 1:
            if press:
                print("click")
                self.do = 1
                self.thread = Thread(target = self.print_message)
                self.thread.start()
            else:
                self.do = 0
                print("end")
        else:
            self.do = 0
            self.stop()

O = DetectMouseClick()
O.run()
  

Комментарии:

1. @Aaroniker — нет проблем, рад получить мой первый ответ на StackOverflow принят. Я слишком долго был вуайеристом!