gpt4 book ai didi

python - PyUserInput - 停止 PyMouseEvent

转载 作者:行者123 更新时间:2023-12-01 04:06:16 28 4
gpt4 key购买 nike

我正在尝试构建一个程序,其第一部分是保存用户点击以进行校准。

我为此使用 PyUserInput(在 Python 3.4.3 上)并遵循 GitHub 上的教程。目前,这是我的代码:

from pymouse import PyMouseEvent

positions = []

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

def click(self, x, y, button, press):
if button == 1:
if press:
print('Click! X=%d - Y=%d' % (x, y))
positions.append((x, y))
print(positions)
if len(positions) >= 4:
self.stop()

C = Click()
C.run()

print('Calibrated')

我遇到的问题是,即使 PyMouseEvent 停止后(当位置达到 4 个值时),我也无法在其之后运行任何内容(即“校准”不打印)。

在 PyMouseEvent 上调用 stop() 后如何继续运行脚本?

感谢任何帮助。

最佳答案

这更像是一种解决方法,而不是“合法”解决方案。这个想法是用引发异常来替换 stop() 方法调用,并将 run() 方法调用包装在 try: except: 语句中。我建议通过子类化 Exception 来创建自己的异常,以便更好地理解代码。

这里:

from pymouse import PyMouseEvent

positions = []

class ListenInterrupt(Exception):
pass

class Click(PyMouseEvent):
def __init__(self):
PyMouseEvent.__init__(self)
return

def click(self, x, y, button, press):
if button == 1:
if press:
print('Click! X=%d - Y=%d' % (x, y))
positions.append((x, y))
print(positions)
if len(positions) >= 4:
raise ListenInterrupt("Calibrated.")
return

C = Click()
try:
C.run()
except ListenInterrupt as e:
print(e.args[0])

这应该停止事件监听器。如果您希望使用此方法重新校准,则仅重新运行相同的监听器实例是行不通的。解决方案是删除 Click 类 的当前实例并每次实例化新的实例。

del C
C = Click()

关于python - PyUserInput - 停止 PyMouseEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35538828/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com