2017-04-12 86 views
2

我是一個初學者在python programmation,我有一個從PyAutoGui截圖功能的問題。屏幕截圖的幾個區域,並保存它們與PyAutoGui - Python 3.4

這裏是我的代碼:

#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) 

這應該採取針對每個區域的截圖我區Several_Regions名單在三個png格式文件mentionned 。

但它創造3 .png格式文件具有完全相同同一區域採取 截圖是第三(也是最後一次)區域(553,456,19,21) ...

照片:

The 3 same files

難道我已經忘了什麼地方?請幫我解決這個問題:)

回答

1

這是因爲在嵌套for循環,你實際上使9截圖。對於每個文件,您保存第三個文件:最後一個區域。因爲在嵌套的循環,你實際上將與參數做截圖:

  • 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]
  • ListOfNames[2],Several_Regions[2]

正如你所看到的,對於每個ListOfNames,你所稱的最後一個是Several_Regions[2]

但是,您可以使用一個zip以確保第一區域被保存到第一個文件名等:

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

鑑於不過的名字告訴你這裏有相當均勻,你可以ListOfNames並使用enumerate(..)代替:

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