Skip to main content
 首页 » 编程设计

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

2025年02月15日26mfrbuaa

我是 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)