截取屏幕的几个区域并使用 PyAutoGui 保存它们 - Python 3.4

Screenshot several regions of the screen and save them with PyAutoGui - Python 3.4

我是 python 编程的初学者,我对 PyAutoGui 的屏幕截图功能有疑问。

这是我的代码:

#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 文件中。

但它创建了 3 个 .png 文件,其中 相同的区域 屏幕截图 这是第 3 个(也是最后一个)区域 (553, 456, 19, 21)...

照片:

我是不是忘记了什么东西?请帮我解决这个问题:)

那是因为在 嵌套 for 循环中,您实际上制作了 九个屏幕截图 。对于每个文件,您保存第三个:最后一个区域。因为在嵌套的 for 循环中,您实际上会使用参数进行屏幕截图:

  • 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 <b>name,LeftTopWidthHeight</b> in <b>zip</b>(ListOfNames,Several_Regions):
    pyautogui.screenshot('%s'%(name), region = LeftTopWidthHeight)

鉴于您在此处显示的名称非常统一,您可以删除 ListOfNames 并使用enumerate(..) 改为:

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