【问题标题】:TypeError: function() argument 1 must be code, not strTypeError: function() 参数 1 必须是代码,而不是 str
【发布时间】:2019-10-29 21:32:16
【问题描述】:

我正在根据自己的喜好重新制作海龟模块(fishcode 是我重新制作的名称),但遇到了一个无法修复的错误。

TypeError: function() 参数 1 必须是代码,而不是 str

我已经在 stackoverflow 上搜索了错误并在此处找到了错误,但这些都没有帮助。

fishcode模块代码:

import turtle

class Window(turtle.Screen):
    def __init__(self):
        turtle.Screen.__init__(self)

测试模块的.py文件代码:

import fishcode

bob = fishcode.Window()

所以我在导入 fishcode 时遇到错误 我希望它能做一个乌龟屏。

【问题讨论】:

标签: python typeerror turtle-graphics


【解决方案1】:

来自Turtle documentation

TurtleScreen 类 将图形窗口定义为绘制海龟的游乐场。它的构造函数需要一个 tkinter.Canvas 或一个 ScrolledCanvas 作为参数。当turtle被用作某些应用程序的一部分时,应该使用它。

函数 Screen() 返回 TurtleScreen 子类的单例对象。当海龟作为一个独立的工具来做图形时,应该使用这个函数。 作为单例对象,无法从其类继承。

您正在尝试从函数派生。 You can't do that. 只能从类派生。

此外,根据上面最后的粗体段落,您将无法从 TurtleScreen 类派生。所以你不能做你想做的事。

无论如何,如果您所做的只是包装 Turtle 代码,它就不会是“重制”。 ;)

【讨论】:

    【解决方案2】:

    我一般同意@LightnessRacesinOrbit 的回答,但我不同意:

    此外,根据上面最后加粗的段落,您将无法 从 TurtleScreen 类派生。所以你不能做什么 你正在尝试做。

    直到需要才创建单例实例,因此可以继承TurtleScreen。这可能最好在 tkinter 下使用 embedded turtle 时完成:

    import tkinter
    from turtle import TurtleScreen, RawTurtle
    
    class YertleScreen(TurtleScreen):
    
        def __init__(self, cv):
            super().__init__(cv)
    
        def window_geometry(self):
    
            ''' Add a new method, or modify an existing one. '''
    
            width, height = self._window_size()
            return (-width//2, -height//2, width//2, height//2)
    
    root = tkinter.Tk()
    
    canvas = tkinter.Canvas(root)
    canvas.pack(side=tkinter.LEFT)
    
    screen = YertleScreen(canvas)
    
    turtle = RawTurtle(screen)
    
    print(screen.window_geometry())
    
    turtle.dot(50)
    
    screen.mainloop()
    

    虽然我相信它也适用于独立海龟,但从一个版本到下一个版本的变化可能更大。

    【讨论】:

    • "作为一个单例对象,从它的类继承是不可能的。"这里指的是Screen()的返回类型,而不是TurtleScreen
    • @Goyo,既然我已经在上下文中重新阅读了这句话,我同意并从我的回答中删除了与它的特别分歧。谢谢。
    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 2018-09-04
    • 2011-01-14
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多