我正在按照自己的喜好重新制作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时遇到错误 我希望它能使屏幕变得乌龟。
答案 0 :(得分:0)
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()
尽管我相信它也可以用于独立龟,但是从一个发行版到另一个发行版的可能性更大。