Ich möchte Pyautogui auch in einer Umgebung mit mehreren Anzeigen verwenden, oder genauer gesagt, ich möchte Bilder in einer Unteranzeige in einer Umgebung mit mehreren Anzeigen erkennen.
python 3.8.5 pyautogui 0.9.50 pyscreez 0.1.26 Nur Betriebssystemfenster
Referenz: Warum pyautoguis locateOnScreen () Multi-Display nicht unterstützt Im obigen Artikel habe ich die folgende Beschreibung gefunden.
PILs imageGrab.grab () unterstützt keine doppelte Anzeige
Lesen Sie dies? Ich dachte, ich habe die Definition von imageGrab.grab () überprüft.
def grab(bbox=None, include_layered_windows=False, all_screens=False, xdisplay=None):
all_screens=False
Überprüfen Sie die Argumente so, ich weiß es seit einiger Zeit nicht, aber zumindest in Python 3.8.5 scheint sich die Grab-Funktion geändert zu haben.
Wenn das Betriebssystem Windows ist, ruft die folgende Funktion image.grab () in locateOnScreen () von pyautogui auf.
def _screenshot_win32(imageFilename=None, region=None):
"""
TODO
"""
# TODO - Use the winapi to get a screenshot, and compare performance with ImageGrab.grab()
# https://stackoverflow.com/a/3586280/1893164
im = ImageGrab.grab()
if region is not None:
assert len(region) == 4, 'region argument must be a tuple of four ints'
region = [int(x) for x in region]
im = im.crop((region[0], region[1], region[2] + region[0], region[3] + region[1]))
if imageFilename is not None:
im.save(imageFilename)
return im
Also werde ich ein Argument an imageGrab.grab () übergeben, das war's.
def _screenshot_win32(imageFilename=None, region=None):
"""
TODO
"""
# TODO - Use the winapi to get a screenshot, and compare performance with ImageGrab.grab()
# https://stackoverflow.com/a/3586280/1893164
#im = ImageGrab.grab()
im = ImageGrab.grab(all_screens=True)
if region is not None:
assert len(region) == 4, 'region argument must be a tuple of four ints'
region = [int(x) for x in region]
im = im.crop((region[0], region[1], region[2] + region[0], region[3] + region[1]))
if imageFilename is not None:
im.save(imageFilename)
return im
Die Bilderkennung ist jetzt auch auf Unteranzeigen möglich.
Das Display ist ausgerichtet
[1][2][3]
Oder
[1][2]
[3][4]
Es wäre schön, wenn sie so gut erzogen wären
[2] [1] [3](Anordnung meines Hauses)
Bei dieser Anordnung gibt locateOnScreen die Koordinaten mit LeftTop von [2] als (0,0) zurück, während die Fensterseite die Koordinaten mit LeftTop von [1] als (0,0) benötigt. Wird sein.
Dieses Problem hat eine API, die Monitore auflistet und Koordinaten in win32api zurückgibt. Daher möchte ich sie beim nächsten Mal verwenden, um sie zu lösen. Bis hierher für diese Zeit.
Recommended Posts