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

时间:2019-06-15 15:41:19

标签: python typeerror turtle-graphics

我正在按照自己的喜好重新制作turtle模块(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时遇到错误 我希望它能使屏幕变得乌龟。

2 个答案:

答案 0 :(得分:0)

来自Turtle documentation

  

TurtleScreen类将图形窗口定义为绘图龟的运动场。它的构造函数需要tkinter.Canvas或ScrolledCanvas作为参数。当乌龟用作某些应用程序的一部分时,应使用它。

     

函数Screen()返回TurtleScreen子类的单例对象。当将turtle用作制作图形的独立工具时,应使用此功能。 作为单例对象,无法从其类继承。

您正试图从一个函数派生。 You can't do that.您只能从类派生。

此外,根据上述最后的粗体部分,您将无法从TurtleScreen类派生。因此,您无法做您想做的事情。

无论如何,如果您要做的只是包装Turtle代码,那将不是“重制”。 ;)

答案 1 :(得分:0)

我通常同意@LightnessRacesinOrbit的回答,但我不同意:

  

此外,根据上面最后的粗体部分,您将无法   从TurtleScreen类派生。所以你就是无能为力   您正在尝试做。

只有在需要时才创建单例实例,因此可以将TurtleScreen子类化。这可能是在tkinter下使用 embedded 乌龟时最好的方法:

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()

尽管我相信它也可以用于独立龟,但是从一个发行版到另一个发行版的可能性更大。