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

Manim报错:'tuple' object has no attribute 'set_width' 求助

问题解决与代码优化

核心错误原因

你将文本内容定义成了元组(words=(...)带逗号)和字符串,而不是Manim的文本Mobject(如Text/Tex)。元组和字符串没有set_width、to_edge这些Manim对象的方法,因此触发AttributeError。

修正后的代码

from manim import Scene, Text, FadeIn, Write, FRAME_WIDTH, UP, DOWN, PURPLE, GREEN

class OpeningQuote(Scene):
    def construct(self):
        # 用Text创建可操作的文本对象(替换原元组)
        words = Text(
            "``Every PooPoo time is PP time but not every PP time is Poo Poo time :(''",
            line_spacing=1.2
        )
        words.set_width(FRAME_WIDTH - 1)
        words.to_edge(UP)
        
        # 给指定范围的字符设置紫色(保持你原代码的索引范围)
        target_char_indices = range(48, 49 + 13)
        for char_mob in [words.submobjects[i] for i in target_char_indices]:
            char_mob.set_color(PURPLE)
        
        # 创建作者文本对象(替换原字符串)
        author = Text("--Taylor Woodard'e")
        author.set_color(GREEN)
        author.next_to(words, DOWN, buff=0.5)  # buff参数调整上下文本间距
        
        # 执行动画
        self.play(FadeIn(words))
        self.wait(2)
        self.play(Write(author, run_time=4))
        self.wait()

关键改动说明

  • 替换文本定义方式:用Text()将字符串转换为Manim可操作的Mobject,只有这类对象才支持set_width、to_edge等布局方法。
  • 精简导入语句:删除重复、冗余的库导入,避免manim和manimlib版本冲突(建议统一使用官方社区版manim)。
  • 优化布局细节:给author添加buff参数调整间距,给words设置line_spacing优化换行后的行高,提升视觉效果。
  • 明确子对象遍历:用列表推导式精准获取目标字符,避免直接遍历切片可能出现的索引混乱。

额外优化建议

  • 确认字符索引:如果不确定需要变色的字符位置,可以添加print([char.get_text() for char in words.submobjects])打印所有字符,精准定位索引。
  • 使用LaTeX增强样式:如果需要更专业的排版(比如引号、斜体),可以用Tex对象结合LaTeX语法,例如:Tex(r"\textit{``Every PooPoo time is PP time''}")。
  • 优化动画流畅度:给Write动画添加速率函数,比如Write(author, run_time=4, rate_func=smooth),让文本书写动画更自然。
  • 统一Manim版本:避免同时安装manim和manimlib,优先使用官方社区版(通过pip install manim安装),API更稳定且文档齐全。

内容的提问来源于stack exchange,提问作者da_halfblood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:23:09