作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试构建一个程序,其第一部分是保存用户点击以进行校准。
我为此使用 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/
我正在尝试构建一个程序,其第一部分是保存用户点击以进行校准。 我为此使用 PyUserInput(在 Python 3.4.3 上)并遵循 GitHub 上的教程。目前,这是我的代码: from py
我是一名优秀的程序员,十分优秀!