在 Manim 中未定义 TextMobject

问题描述

我刚开始学习 manim,我看到了第一个视频,其中我们在 example_scenes.py 中创建了一个类。当我尝试运行它时,它说名称 TextMobject 未定义。我该怎么办?

我创建的类:

class FirstScene(Scene):
    def construct(self):
        text=TextMobject("text")
        self.add(text) 

conda 提示中使用的代码

python -m manim example_scenes.py FirstScene -w

请检查 this file获取我正在尝试运行的“FirstScene”类(此文件的最后一个类)。

解决方法

错误很简单。

“TextMobject”未定义

这是对您 TextMobject 未在代码中的任何位置进行定义,也未导入的投诉。

编辑

补充评论和信息后,问题是manim库已经更新,当前版本已经重新构建了其内部代码组织。您链接到的指南引用了旧版本的 manim,您可以在其中执行 from manimlib.imports import,就好像有一个单独的 imports.py

但是,更新的版本需要您执行以下操作:manimlib import *。通过查看 official repository 的指南可以确认这一点。同样,this is the updated examples_scene.py,同样来自它的官方存储库。

from manimlib import *

class FirstScene(Scene):
    def construct(self):
        text=TextMobject("text")
        self.add(text) 

如果它抱怨 Scene not found,请检查您是否安装了最新版本的软件包(如果您使用的是过时的版本,请再次安装 git clone 并重新安装)。如果您想明确导入它,最新版本指向 Scene 位于此位置 (https://github.com/3b1b/manim/blob/master/manimlib/scene/scene.py),因此您的导入路径将是 manimlib.scene.scene:

from manimlib.scene.scene import Scene

但是,如果您使用 from manimlib import *,如果您不进行显式导入,它也会被导入。

您可以在包裹的 __init__.pylinked here 上确认这一点:

...
from manimlib.scene.scene import *
...

无论哪种方式,TextMobject 都应该由您定义,或者在您使用之前导入。我建议您进行更新,然后使用上面的代码重试。

编辑 2

除了您导入 Scene 的方式发生变化之外,根据@giac 的回答,TexMobject 被重命名为 TexTextMobject 被重命名为 {{1} }.我不会指望它仍然是正确的或者是唯一的变化,因此如果您偶然发现这里试图获得答案,我建议您查看 official repository 的指南。

,

我在文件 whatsnew.rst

中发现了这个以防万一
  • TexMobject 重命名为 TexTextMobject 重命名为 TexText
,

我对 manim 也很陌生,遇到了完全相同的问题。我发现您可以将 TextMobject 替换为 TexText。我不确定到底有什么区别,但它们似乎以略有不同的字体大小呈现。我在尝试使用 TexText 时出错。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...