首页 > 解决方案 > 我如何阻止这些乌龟错误,它们是什么意思?

问题描述

在我运行我的程序然后关闭 Turtle 窗口后,Python shell 给了我一个错误。

我试图在屏幕中间画一条虚线来复制乒乓球。我对 Python & Turtle 很陌生。我也没有真正尝试过任何修复它。

这是给我错误的代码:

import turtle as t

#creates screen & assigns it to 'screen'
screen = t.Screen()

#setiing up screen
screenSize = 500
screen.setup(screenSize, screenSize)

#variables
human = t.Turtle()
ai = t.Turtle()
border = t.Turtle()

spacing = 10

#assigns a path to paddle gif to 'paddle'
paddle = 'images/paddle.gif'

#adds 'paddle' to screen
screen.addshape(paddle)

#assigns 'paddle' to human & ai shape
human.shape(paddle)
ai.shape(paddle)

#penup
human.penup()
ai.penup()
border.penup()

#making border
border.hideturtle()
border.goto(0, 250)
border.pendown()
border.right(90)
x = 0

while x in range(int(screenSize/spacing)):

    border.forward(spacing)
    border.penup()
    border.forward(spacing)
    border.pendown()

这是错误:

  File "<pyshell#8>", line 3, in <module>
    border.forward(spacing)
  File "/usr/lib/python3.7/turtle.py", line 1637, in forward
    self._go(distance)
  File "/usr/lib/python3.7/turtle.py", line 1605, in _go
    self._goto(ende)
  File "/usr/lib/python3.7/turtle.py", line 3158, in _goto
    screen._pointlist(self.currentLineItem),
  File "/usr/lib/python3.7/turtle.py", line 755, in _pointlist
    cl = self.cv.coords(item)
  File "<string>", line 1, in coords
  File "/usr/lib/python3.7/tkinter/__init__.py", line 2469, in coords
    self.tk.call((self._w, 'coords') + args))]
_tkinter.TclError: invalid command name ".!canvas"error:

我希望它在中间画一条虚线,它确实如此,但是当我关闭海龟屏幕时它给了我一个错误。

标签: pythonpython-3.xturtle-graphics

解决方案


问题似乎是这实际上是一个无限循环:

 while x in range(int(screenSize/spacing)):

因此,当您关闭窗口时,您将在循环中的其中一个命令的中间破坏它。问题是您使用while而不是for. 以下是我可能会如何布置相同的代码:

from turtle import Screen, Turtle

# Declare constants
SCREEN_SIZE = 500
LINE_SPACING = 10
PADDLE_FILE = 'images/paddle.gif'

# Create screen & assign it
screen = Screen()

# Set up screen
screen.setup(SCREEN_SIZE, SCREEN_SIZE)

# Add 'paddle' to screen
screen.addshape(PADDLE_FILE)

# Initialize turtles
human = Turtle()
human.shape(PADDLE_FILE)
human.penup()

ai = Turtle()
ai.shape(PADDLE_FILE)
ai.penup()

border = Turtle()
border.hideturtle()
border.penup()

# Draw border
border.sety(250)
border.right(90)
border.pendown()

for _ in range(SCREEN_SIZE // (LINE_SPACING * 2)):
    border.forward(LINE_SPACING)
    border.penup()
    border.forward(LINE_SPACING)
    border.pendown()

screen.mainloop()

推荐阅读