TypeError: function () аргумент 1 должен быть кодом, а не str - PullRequest
0 голосов
/ 15 июня 2019

Я переделываю модуль черепахи (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()

Итак, я получаю сообщение об ошибке при импорте кода рыб, я ожидаю, что он создаст экран черепахи.

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Я в целом согласен с ответом @ LightnessRacesinOrbit, но не согласен с:

Кроме того, в соответствии с последним проходом, выделенным жирным шрифтом, вы не сможете извлечь из класса TurtleScreen. Так что вы просто не можете делать то, что ты пытаешься сделать.

Экземпляр синглтона не создается до тех пор, пока он не понадобится, поэтому возможно создать подкласс TurtleScreen. Это, вероятно, лучше всего сделать при использовании внедренной черепахи под tkinter:

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

Хотя я полагаю, что это также будет работать для автономной черепахи, хотя, скорее всего, это изменится от одного выпуска к другому.

0 голосов
/ 15 июня 2019

Из документации Черепаха :

Класс TurtleScreen определяет графические окна как игровую площадку для рисования черепах. Для его конструктора в качестве аргумента требуется tkinter.Canvas или ScrolledCanvas. Его следует использовать, когда черепаха используется как часть какого-либо приложения.

Функция Screen () возвращает одноэлементный объект подкласса TurtleScreen. Эту функцию следует использовать, когда черепаха используется как самостоятельный инструмент для создания графики. Как одноэлементный объект, наследование от его класса невозможно.

Вы пытаетесь получить из функции. Вы не можете этого сделать. Вы можете получать только из классов.

Кроме того, согласно последнему заключительному отрывку выше, вы не сможете получить класс TurtleScreen. Так что вы просто не можете делать то, что пытаетесь сделать.

Во всяком случае, это не было бы "римейком", если бы все, что вы сделали, заключались в том, чтобы обернуть код Черепахи. ;)

...