使用pygetwindow截取特定窗口报错:AttributeError: 'list'无topleft属性
问题解决:AttributeError: 'list' object has no attribute 'topleft'
错误原因
pygetwindow.getWindowsWithTitle() 函数返回的是所有匹配指定标题的窗口对象组成的列表,而非单个窗口对象。你的代码直接对列表调用 .topleft 属性,自然会触发"列表对象无此属性"的错误。
解决步骤
- 确认并获取目标窗口:先检查返回的列表是否为空,再取列表中的第一个窗口(如果确定只有一个匹配窗口);
- 修正截图后处理逻辑:
im.save(path)会返回None,不能链式调用.show(),需要分开执行保存和显示操作。
修改后的完整代码
import pygetwindow import pyautogui from PIL import Image import platform path = 'report/result.png' titles = pygetwindow.getAllTitles() if platform.system() == 'Windows': # 获取匹配标题的窗口列表 windows = pygetwindow.getWindowsWithTitle('bachelor-project-vision-based-traffic-scene-surveillance – report.py') # 检查是否找到窗口 if windows: # 取第一个匹配的窗口 window = windows[0] left, top = window.topleft right, bottom = window.bottomright # 先截图 pyautogui.screenshot(path) im = Image.open(path) # 裁剪窗口区域 im = im.crop((left, top, right, bottom)) # 保存图片(save返回None,不能赋值给im后调用show) im.save(path) # 单独调用show显示图片 Image.open(path).show() else: print("未找到匹配标题的窗口") elif platform.system() == 'Darwin': x1, y1, width, height = pygetwindow.getWindowGeometry('Chrome') x2 = x1 + width y2 = y1 + height pyautogui.screenshot(path) im = Image.open(path) # im = im.crop((x1, y1, x2, y2+10)) im.save(path)
额外说明
- 如果存在多个匹配标题的窗口,可以遍历
windows列表,根据窗口的其他属性(如大小、位置)筛选目标窗口; - 确保窗口标题完全匹配,避免因大小写、特殊字符差异导致找不到窗口。
内容的提问来源于stack exchange,提问作者invisible
相关产品推荐
相关产品推荐

