“鼠标现在在哪里?”

时间:2019-05-24 03:28:20

标签: python user-interface jupyter-notebook

我正在尝试编写一个程序,当我四处移动鼠标时,它们会不断显示鼠标光标的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

1 个答案:

答案 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

这会降低循环速度,并且仅在位置更改后才会打印。