Связки клавиш черепахи, почему они продолжают падать? - PullRequest
1 голос
/ 17 марта 2019
#Turtle messing around
import turtle
import os


wn = turtle.Screen()
wn.bgcolor("black")

border = turtle.Turtle()
border.speed(0)
border.penup()
border.color("blue")
border.setposition(-200,-200)
border.setheading(90)
border.pensize(3)
border.pendown()
for x in range(4):
border.fd(400)
border.rt(90)
border.penup()
border.fd(300)
border.rt(90)
border.hideturtle()

#Player graphics
player= turtle.Turtle()
player.setposition(0,-150)
player.color("white")
player.left(90)
player.shape("triangle")
player.shapesize(1)
player.speed(0)
player.penup()
turtle.mainloop()

playerspeed = 15


#Player movement
def moveleft():
    x = player.xcor()
    x -= playerspeed
    if x < -280:
        x = -280
        player.setx(x)
def moveright():
    x = player.xcor()
    x += playerspeed
    if x > -280:
        x = 280
        player.setx(x)


wn.listen()
wn.onkeypress(moveleft, "Left")
wn.onkeypress(moveright, "Right")


turtle.mainloop()

Мой код указан выше.

Всякий раз, когда я запускаю ее, обычная программа ничего не делает (я пытался заменить последние три wn на turtle).

Но когда я закрываю окно, появляется другое (только когда последние три черепахи), и я получаю следующую ошибку:

     ================================
>>> 
Traceback (most recent call last):
  File "REDACTED", line 54, in <module>
    wn.listen()
  File "G:\python\lib\turtle.py", line 1438, in listen
    self._listen()
  File "G:\python\lib\turtle.py", line 710, in _listen
    self.cv.focus_force()
  File "G:\python\lib\turtle.py", line 426, in focus_force
    self._canvas.focus_force()
  File "G:\python\lib\tkinter\__init__.py", line 428, in focus_force
    self.tk.call('focus', '-force', self._w)
_tkinter.TclError: can't invoke "focus" command:  application has been 
destroyed

Я не совсем уверен, что делать здесь, все эти ошибки меня сбивают с толку, и я не понимаю, я ценю всю помощь, которую я могу получить, спасибо.

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Позвольте мне сказать вам вашу первую ошибку: в строке 13, где вы говорите for x in range(4): отступ там не применяется. Вы должны сделать отступ, если у вас есть петли, иначе вы получите ошибку.

Вот что я получил, когда скопировал ваш код и удалил turtle.mainloop(): нажмите на ссылку, чтобы увидеть ее

https://i.stack.imgur.com/dI3Lg.gif

Кроме того, часть turtle.mainloop() ничего не делает, кроме как держит ее в бесконечном цикле.

Если вы абсолютно этого хотите, поставьте его в конце.

0 голосов
/ 17 марта 2019

Проблема в строке 34. Когда вы вызываете turtle.mainloop(), программа входит в бесконечный цикл;ни один из кодов в строках ниже не будет выполняться, включая ваших слушателей событий.

# ... unchanged code ...

player.speed(0)
player.penup()
turtle.mainloop()  # <--- infinite loop! remove this line.

# code below this line is not executed
playerspeed = 15

# ... unchanged code ...

Удалите эту строку, и вы увидите срабатывание ваших обработчиков (добавьте отладочные отпечатки, если вы не уверены).Ваш второй turtle.mainloop() звонок на последней строке правильно запустит окно.

...