2

停止するまでマウスの位置を絶えず出力する関数を作成しようとしています。pyautogui をインポート

import pyautogui

print('Press CTRL + "c" to stop')

while True:
    try:
        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:
        print('\nDone')
        break

予想される出力は次のようになります。

X:265 Y:634 1行だけ連続更新

しかし、これは私が代わりに得ているものです:

XXXXXXXXXXXXXXXXXXX: 665 Y: 587

XXXXXXXXXXXXXXXXXX: 665 Y: 587

XXXXXXXXXXXXXXXXXXXXX: 665 Y: 587

XXXXXXXXXX: 718 Y: 598

XXXXXXXXXXXX: 1268 Y: 766

\b 文字を削除する import pyautogui

print('Press CTRL + "c" to stop')

while True:
try:
    x, y = pyautogui.position()
    positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
    print(positionStr)
    print('\b' * len(positionStr), end = '', flush = True)
except KeyboardInterrupt:
    print('\nDone')
    break

X: 830 Y: 543

X: 830 Y: 543

X: 830 Y: 543

X: 830 Y: 543

終わり

4

2 に答える 2

4

キャリッジリターンを使用して行を印刷できます。たとえば、次のようになります。

print(positionStr + '\r'),

そのように、次の行は既存の行を置き換えます。そして、新しいマウス位置で更新された 1 つの行が常に表示されます。

完全なスクリプト:

#!/usr/bin/env python

import pyautogui

print('Press CTRL + "c" to stop')

while True:
    try:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr + '\r'),
    except KeyboardInterrupt:
        print('\nDone')
        break

編集

以下のコメントで述べたように、このソリューションは Unix プラットフォームで動作しますが、他のプラットフォームではテストされていません。行末規則が異なるため、壊れるはずです。それを指摘してくれた@Code-Apprenticeに感謝します。

再編集

OP と Code-Apprentice のコメント以来、スクリプトを次のように修正しようとしましたが、期待どおりに動作します。

import pyautogui

print('Press CTRL + "c" to stop')

while True:
    try:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr, end=' ')
        print('\b' * (len(positionStr) + 1), end='')
    except KeyboardInterrupt:
        print('\nDone')
        break
于 2016-10-19T04:31:49.863 に答える
1

十分な文字のバックスペースがありません。余分なスペースの「終了」文字を考慮するのを忘れました。もちろん、endパラメータを完全に省略できるはずです。

于 2016-10-19T04:23:53.363 に答える