从类实例获取属性而不传递Self

问题描述 投票:0回答:1
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'上,由于调用函数的事件是如何获得自我属性的?看来我无法将自我对象传递给事件。

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

在这种情况下,它说缺少一个必需的参数,即“按下”的参数。

python python-3.x listener pynput
1个回答
0
投票
您可以使用类似这样的东西。

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


-1
投票
将“自身”作为“ on_click”函数中的第一个参数传递。

from pynput.mouse import Listener, Button 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: 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

© www.soinside.com 2019 - 2024. All rights reserved.