Получить атрибут из экземпляра класса, не передавая Self - PullRequest
0 голосов
/ 24 октября 2019
from pynput.mouse import Listener, Button

class ClickListener:
    def __init__(self):
        self.ClickTimes = 0
        self.CurrentClick = 0
        self.ClickPositions = []

    def on_click(x, y, button, pressed):
        if pressed and button == Button.middle:
            ClickPositions.append((x,y))
            self.CurrentClick += 1
            if self.ClickTimes <= self.CurrentClick:
                return Falses

    def getClicks(self, nr):
        self.ClickPositions = []
        self.CurrentClick = 0
        self.ClickTimes = nr
        with Listener(on_click = ClickListener.on_click) as listener:
            listener.join()
        return self.ClickPositions

В функции 'on_click' как я могу получить доступ к атрибутам self, поскольку это событие, которое вызывает функции? Кажется, я не могу передать собственный объект событию.

Edit1.:

class ClickListener:
    def __init__(self):
        self.ClickTimes = 0
        self.CurrentClick = 0
        self.ClickPositions = []

    def on_click(self, x, y, button, pressed):
        if pressed and button == Button.middle:
            self.ClickPositions.append((x,y))
            self.CurrentClick += 1
            if self.ClickTimes <= self.CurrentClick:
                return Falses

    def getClicks(self, nr):
        self.ClickPositions = []
        self.CurrentClick = 0
        self.ClickTimes = nr
        with Listener(on_click = self.on_click) as listener:
            listener.join()
        return self.ClickPositions

в этом случае он говорит, что отсутствует один обязательный аргумент, «нажатый».

1 Ответ

0 голосов
/ 24 октября 2019

вы можете использовать что-то вроде этого.

from pynput.mouse import Listener, Button

class ClickListener:
    def __init__(self):
        self.ClickTimes = 0
        self.CurrentClick = 0
        self.ClickPositions = []

    @classmethod
    def on_click(cls, x, y, button, pressed):
        if pressed and button == Button.middle:
            cls.ClickPositions.append((x,y))
            cls.CurrentClick += 1
            if cls.ClickTimes <= cls.CurrentClick:
                return Falses

    @classmethod
    def getClicks(cls, nr):
       cls.ClickPositions = []
       cls.CurrentClick = 0
       cls.ClickTimes = nr
       with Listener(on_click = cls.on_click) as listener:
            listener.join()
       return cls.ClickPositions
...