如何在Manim Hello World程序中修复AttributeError?

时间:2019-06-13 19:33:50

标签: python runtime-error dependency-management manim

我正在尝试用Manim编写Hello World程序。

我已经安装了Manim及其必备程序,并且可以按预期从命令提示符处运行示例代码。此示例代码以异常方式运行;用户发出的命令不仅指定.py文件,而且指定其中的单个类,并且Python执行类定义代码,似乎没有实例化该类。

现在我正在尝试编写一个独立的.py文件,该文件通过在运行时实例化一个类来工作(我正在Visual Studio Community 2019中运行它),而不是需要外部命令。

我已经检查了许多类似的问题,但是不幸的是,它们一般都是关于Hello World程序的,甚至涵盖许多非Python语言。

我发现了一些AttributeError:'____'对象在搜索中没有属性'____'问题,包括这个有用的解释(https://stackoverflow.com/a/8696339/2364796),但似乎没有什么适用于我明确编写的代码。

我还检查了IRC,建议在导入的代码中触发该问题。但是,相同的代码在导入到样本中时可以正常运行,因此我必须使用不正确的代码。

这是我的Hello World程序的当前代码。

from manimlib.imports import *

class GreetingScript(Scene):
    def construct(self):
        characters = TextMobject("Hello World!")
        self.add(characters)

scene1 = Scene()
readthrough = GreetingScript(scene1)

这是上面的代码产生的错误消息。

Media will be stored in ./media\. You can change this behavior by writing a 
diff
erent directory to media_dir.txt.
Traceback (most recent call last):
  File "C:\Users\Admin\Documents\Visual Studio 
2019\Projects\PythonApplication1\
PythonApplication1\PythonApplication1.py", line 8, in <module>
    scene1 = Scene()
  File "C:\Users\Admin\PortableApps\manim-0.1.5\manimlib\scene\scene.py", 
line 3
7, in __init__
    self, **self.file_writer_config,
  File "C:\Users\Admin\PortableApps\manim- 
0.1.5\manimlib\scene\scene_file_writer
.py", line 44, in __init__
    self.init_output_directories()
  File "C:\Users\Admin\PortableApps\manim- 
0.1.5\manimlib\scene\scene_file_writer
.py", line 49, in init_output_directories
    output_directory = self.output_directory or 
self.get_default_output_director
y()
  File "C:\Users\Admin\PortableApps\manim- 
0.1.5\manimlib\scene\scene_file_writer
.py", line 80, in get_default_output_directory
    filename = os.path.basename(self.input_file_path)
AttributeError: 'SceneFileWriter' object has no attribute 'input_file_path'
Press any key to continue . . .

我希望程序的输出是文本“ Hello World!”的显示。但实际输出是AttributeError:“ SceneFileWriter”对象没有属性“ input_file_path”,并伴随有上述消息的其余部分。

2 个答案:

答案 0 :(得分:1)

解决此问题的最佳方法是删除创建 var searchResult = new List<MyList>(); searchResult = (from incident in db.Incident join categories in db.Category on incident.Inc_Id equals categories.Inc_Id join intakeRes in db.Intake on incident.Inc_Id equals intakeRes.Inc_Id where (!string.IsNullOrEmpty(filters.Location) ? incident.Location == filters.Location && !string.IsNullOrEmpty(incident.Location) : incident.IncidentNumber != null) && (filters.Status != null ? incident.Status == filters.Status && !string.IsNullOrEmpty(incident.Status) : incident.IncidentNumber != null) select new MyList { IncidentId = incident.Inc_Id, IncidentNumber = incident.IncidentNumber, Location = incident.Location }).ToList(); 对象的代码。要使此代码正常工作,只需要实现场景类的源代码即可,并且可以使用以下命令生成场景:

scene1

$ python -m manim -p /path/to/source.py GreetingScript 标志意味着在渲染场景之后打开视频。希望对您的问题有所帮助。

答案 1 :(得分:-1)

from big_ol_pile_of_manim_imports import *

class makeText(Scene):
    def construct(self):
        #######Code#######
        #Making text
        first_line = TextMobject("Manim is fun")
        second_line = TextMobject("and useful")
        final_line = TextMobject("Hope you like it too!", color=BLUE)
        color_final_line = TextMobject("Hope you like it too!")

        #Coloring
        color_final_line.set_color_by_gradient(BLUE,PURPLE)

        #Position text
        second_line.next_to(first_line, DOWN)

        #Showing text
        self.wait(1)
        self.play(Write(first_line), Write(second_line))
        self.wait(1)
        self.play(FadeOut(second_line), ReplacementTransform(first_line, final_line))
        self.wait(1)
        self.play(Transform(final_line, color_final_line))
        self.wait(2)

您尝试过什么吗?