web-dev-qa-db-ja.com

pyautogui.locateCenterOnScreen()は、座標の代わりにNoneを返します

import pyautogui
print (pyautogui.locateCenterOnScreen("C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"))

座標を返す代わりに、Noneを返します。

17
Venkatesh J

それのように思えます 見つかりませんでした 画面上の画像に一致するもの。

locateCenterOnScreen(image, grayscale=False)-画面上で最初に見つかった画像のインスタンスの中心の(x、y)座標を返します。画面に見つからない場合はNoneを返します。

6
Don Kirkby

撮影するのではなく、pyautogui組み込み関数でスクリーンショットを撮ったときに問題が解決しました WIN+Printscr スクリーンショットを撮ったら WIN+Printscr その場合、ピクセル密度およびその他の画像関連データは、pyautogui組み込み関数と比較して異なる場合があります。これは私のためにあなたのために働いたかもしれませんそれはExのために働いた--wifi.png wifi.png 最初に完全なスクリーンショットを撮り、その完全な画像からトリミングしてから、以下に示すコードにこれを入れました

import pyautogui
print(pyautogui.locateCenterOnScreen('wifi.png'))
4
abhishek Singh

最初の問題は非常に単純です。ライブラリは、渡された画像が画面に表示されていないため、座標ではなくNoneを返します ドキュメント内

ただし、ここでは、特に質問に報奨金を投稿して ここに同様の質問 を提示したユーザーから、誤解が生じる可能性があります。コメントがありました

「写真は私のデスクトップにあります」

この関数を使用するときは、ファイル名を文字列として渡します。次に、ライブラリは画像ファイルをロードし、画面上で画像を探します(ファイル名ではありません)。 pyautogui.locatecentreonscreen()は、画面に表示されている場合、実際の画像を探します。デスクトップ上のファイルや、渡された画像と同じ名前のファイルアイコンは検索されません。

次の画像を含むflower.jpgという名前のファイルがデスクトップに保存されているとします。

enter image description here

他のウィンドウを開いていない状態で、次を実行します。

coords = pyautogui.locateCenterOnScreen('C:\\Richard\\Users\\flower.jpg')
print(coords)

結果はNoneです

これは、その画像が画面に表示されないためですアイコンがデスクトップにあり、名前はflower.jpgです。これは、そのアイコンが花の小規模バージョンであっても当てはまります。

ただし、(この投稿を準備しているときに)画像を表示したままにして同じことを行うと、座標が取得されます(例:

enter image description here

ご覧のとおり、実際の画像が画面に表示されているため、ライブラリは座標524,621を使用して画像を検索します。

要約すると、ライブラリが画面上でユーザーに表示されている画像を見つけられない場合、Noneを返します。コードが実行されている時点で、画像がユーザーに表示される必要があることに注意してください。デスクトップなどのアイコンや、別のウィンドウの背後に「隠されている」ウィンドウの画像は見つかりません。それはあなたがやろうとしていることですか?

2
J Richard Snape

画像がアイコンと同じサイズであることを確認しますか?

そうでない場合、pyautogui.locateCenterOnScreen()TypeError: 'NoneType' object is not iterableを発生させます

また、アイコン全体が表示され、画像と同じように見えることを確認してください:"C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"

問題が解決されることを願っています!

1
Vin

良い説明ですが、pyautoguiよりもうまく機能するライブラリはありますか?つまり、画面上でまったく同じ画像が必要なのです。時々同様のものが必要です。 – GLHF 2016年5月11日15:45

次のコード行を使用してみてください。

pyautogui.locateCenterOnScreen("yourscreenshot.PNG", confidence=0.9)

信頼区間は0.1〜0.9の範囲だと思います。ほぼ同じように見える複数の写真がない限り、これで例外が解決する可能性があります。それでも問題が解決しない場合は、元の画像を多かれ少なかれ使用して2番目のスクリーンショットを作成し、次のコードを記述してみてください。

try:
    pyautogui.locateCenterOnScreen("yourscreenshot.PNG", confidence=0.9)
except TypeError:
    pyautogui.locateCenterOnScreen("yourscreenshot2.PNG", confidence=0.9)

これにより、少し異なる画像で2回目の試行が行われ、TypeErrorが返されないことが期待されます。

0
Aleks

ドン・カービーが言ったことに基づいて、一致する画像が見つかりませんでした画面上。たとえば、Windowsフォトギャラリー(またはTk)で画像を開くと、pyautoguiが画像を見つけます。

0
NoOneIsHere