我是 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)
这应该是我提到的每个区域的截图 在三个 .png 文件中的 Several_Regions 区域列表中。
但它创建了 3 个 .png 文件,其中包含完全相同的区域 那是第三个(也是最后一个)区域(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)
