2017-04-12 47 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)