我正在尝试编写一个程序,当我四处移动鼠标时,它们会不断显示鼠标光标的x和y坐标(自动处理python第417页中的无聊内容)。
我曾尝试调整Try语句的缩进,但我仍然 收到缩进错误消息。
import pyautogui
print('press Ctrl-C to quit.')
try:
while True:
except KeyboardInterrupt:
print('\nDone.')
x,y=pyautogui.position()
positionStr='X: ' + str(x).rjust(4) + 'Y: ' + str(y).rjust(4)
print(positionStr,end='')
print('\b'*len(positionStr),end='',flush=True)
我希望输出两行,如下所示:
按Ctrl-C退出。 X:290 Y:424
但是我得到的输出是:
File "<ipython-input-2-b3f3ee266ed5>", line 6
except KeyboardInterrupt:
^
IndentationError: expected an indented block
答案 0 :(得分:1)
代码应为:
import pyautogui
print('press Ctrl-C to quit.')
try:
while True:
x,y=pyautogui.position()
positionStr='X: ' + str(x).rjust(4) + 'Y: ' + str(y).rjust(4)
print(positionStr,end='')
print('\b'*len(positionStr),end='',flush=True)
except KeyboardInterrupt:
pass
您在异常处理块中具有循环主体。
至少现在它可以使输出更加有用。所需要的是仅在位置从上次轮询以来已更改的情况下进行打印,并将其放入循环中的time.sleep(0.1)
。
import pyautogui
import time
print('press Ctrl-C to quit.')
last_position = None
try:
while True:
x,y=position=pyautogui.position()
if position != last_position:
positionStr='X: ' + str(x).rjust(4) + 'Y: ' + str(y).rjust(4)
print(positionStr,end='')
print('\b'*len(positionStr),end='',flush=True)
last_position = position
time.sleep(0.1)
except KeyboardInterrupt:
pass
这会降低循环速度,并且仅在位置更改后才会打印。