You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pygetwindow截取特定窗口报错:AttributeError: 'list'无topleft属性

问题解决:AttributeError: 'list' object has no attribute 'topleft'

错误原因

pygetwindow.getWindowsWithTitle() 函数返回的是所有匹配指定标题的窗口对象组成的列表,而非单个窗口对象。你的代码直接对列表调用 .topleft 属性,自然会触发"列表对象无此属性"的错误。

解决步骤

  1. 确认并获取目标窗口:先检查返回的列表是否为空,再取列表中的第一个窗口(如果确定只有一个匹配窗口);
  2. 修正截图后处理逻辑: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:35:28