2 votes

Capture d'écran de plusieurs régions de l'écran et sauvegarde avec PyAutoGui - Python 3.4

Je suis un débutant en programmation python et j'ai un problème avec la fonction de capture d'écran de PyAutoGui.

Voici mon code :

#Libraries
import pyautogui, os

#Work Directory
os.chdir('C:/Users/mypath')

#Data and Variables:
ListOfNames=['T1.png','T2.png','T3.png']

#list of desired positions to screenshot:
Several_Regions=[(760, 142, 22, 23),(692, 352, 19, 21),(553, 456, 19, 21)]

#Program:  
for name in ListOfNames:
    for LeftTopWidthHeight in Several_Regions:
        pyautogui.screenshot('%s'%(name), region = LeftTopWidthHeight)

C'est censé prendre une capture d'écran de chaque région que j'ai mentionnée. dans la liste des régions Plusieurs_Régions en trois .png des fichiers.

Mais il crée 3 .png avec exactement la même région pris en capture d'écran c'est le 3ème (et dernière) région (553, 456, 19, 21) ...

Photo :

The 3 same files

Est-ce que j'ai oublié quelque chose quelque part ? S'il vous plaît, aidez-moi à résoudre ce problème :)

1voto

CommuSoft Points 6439

C'est parce que dans le emboîté for les boucles que vous faites réellement neuf captures d'écran . Et pour chaque fichier, vous enregistrez le troisième : la dernière région. Car dans les boucles for imbriquées, vous allez en fait faire des captures d'écran avec des paramètres :

  • ListOfNames[0],Several_Regions[0] ,
  • ListOfNames[0],Several_Regions[1] ,
  • ListOfNames[0],Several_Regions[2] ,
  • ListOfNames[1],Several_Regions[0] ,
  • ListOfNames[1],Several_Regions[1] ,
  • ListOfNames[1],Several_Regions[2] ,
  • ListOfNames[2],Several_Regions[0] ,
  • ListOfNames[2],Several_Regions[1] et
  • ListOfNames[2],Several_Regions[2] .

Donc, comme vous pouvez le voir, pour chaque ListOfNames le dernier avec lequel vous appelez cela est Several_Regions[2] .

Vous pouvez toutefois utiliser un zip pour s'assurer que la première région est enregistrée dans le premier nom de fichier, etc :

for name,LeftTopWidthHeight in zip(ListOfNames,Several_Regions):
    pyautogui.screenshot('%s'%(name), region = LeftTopWidthHeight)

Étant donné cependant que les noms que vous montrez ici sont assez uniforme vous pouvez drop le site ListOfNames et utiliser enumerate(..) à la place :

for idx,LeftTopWidthHeight in enumerate(Several_Regions):
    pyautogui.screenshot('T%s.png'%idx, region = LeftTopWidthHeight)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X