截取屏幕的几个区域并使用 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)
我是 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)