Атрибут Черепаха не определен - PullRequest
0 голосов
/ 31 октября 2018

Полный новичок здесь. Могу ли я узнать, почему я получил сообщение об ошибке (NameError: имя 'width' не определено), когда я запускаю этот код? Спасибо:)

from tkinter import *
from turtle import *

root = Tk()
T = Text(root, root.title("Controls"), height=8, width=60)
T.pack()
T.insert(END, """Right arrow key = move forward\nLeft arrow key = move 
backward\nr = turn right\nl = turn left\n
u = pen up\nd = pen down\nh = go home\nc = clear""")


def main():
    width(2)
    speed(0)
    pencolor("blue")
    onkey(up, "u")
    onkey(down, "d")
    onkey(clear, "c")
    onkey(home, "h")
    onkey(lambda: forward(5), "right")
    onkey(lambda: back(5), "left")
    onkey(lambda: left(5), "l")
    onkey(lambda: right(5), "r")
    listen()
    return "Done!"


if __name__ == "__main__":
msg = main()
print(msg)
mainloop()

1 Ответ

0 голосов
/ 31 октября 2018

Я получил сообщение об ошибке (NameError: имя 'width' не определено), когда я запустите этот код

Когда я запустил этот код, я получил ошибку:

_tkinter.TclError: неверный тип события или keysym "right"

Этот код беспорядок, а именно:

  • Он открывает два окна, комбинируя черепаху и ткинтер неконтролируемым образом. Когда черепаха автономна, мы используем Turtle и Screen, но при внедрении в tkinter мы используем RawTurtle и TurtleScreen. Вместо того, чтобы второе окно появлялось как побочный эффект игнорирования правил, вы действительно должны иметь контроль над созданием этого окна.

  • Этот код используется для установки заголовка корневого окна как побочного эффекта передачи None в качестве аргумента XView в Text():

    T = текст (root, root.title ("Controls"), высота = 8, ширина = 60)

  • Вы используете неправильные названия клавиш для стрелок - они должны быть 'Left' и 'Right 'для функции onkey() черепахи, а не 'left' и 'right'.

Вот мое понимание того, как должен создаваться этот тип программы:

import tkinter as tk
from turtle import RawTurtle, ScrolledCanvas, TurtleScreen

root = tk.Tk()

instructions = tk.Toplevel()
instructions.title("Controls")

text = tk.Text(instructions, height=8, width=60)
text.pack()
text.insert(tk.END, """Right arrow key = move forward\nLeft arrow key = move
backward\nr = turn right\nl = turn left\n
u = pen up\nd = pen down\nh = go home\nc = clear""")

canvas = ScrolledCanvas(root, width=500, height=500)
canvas.pack()

screen = TurtleScreen(canvas)

turtle = RawTurtle(screen, 'turtle')
turtle.pencolor('blue')
turtle.width(2)

screen.onkey(turtle.penup, "u")
screen.onkey(turtle.pendown, "d")
screen.onkey(turtle.clear, "c")
screen.onkey(turtle.home, "h")

screen.onkey(lambda: turtle.forward(5), "Right")
screen.onkey(lambda: turtle.backward(5), "Left")
screen.onkey(lambda: turtle.left(5), "l")
screen.onkey(lambda: turtle.right(5), "r")

screen.listen()

screen.mainloop()
...