2017-02-08 2 views
0

Использование Python: Я пытаюсь создать игру, в которой черепаха не должна повторять свои шаги (немного как одиночный игрок Tron), но я получаю «Исключение в обратном вызове Tkinter» «когда я пытаюсь запустить свою программу. ошибка:Программа Python turtle умирает с ошибкой «Исключение в Tkinter callback»

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Users\GURNHH\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1550, in __call__ 
    return self.func(*args) 
    File "C:\Users\GURNHH\AppData\Local\Programs\Python\Python35-32\lib\turtle.py", line 686, in eventfun 
    fun() 
    File "C:/Users/GURNHH/OneDrive - Rugby School/ICT/Python/bored.py", line 20, in k1 
    t.forward(10) 
    File "<string>", line 5, in forward 
turtle.Terminator 

и моя программа:

import turtle as t 
from turtle import * 
setup(1200, 700) 
Screen() 
title("Turtle Keys") 
showturtle() 

turns = 0 
badpos = [] 

def k1(): 

    if t.pos in badpos and badpos.index(t.pos) == turns: 
     print("die") 
     print(t.pos) 
     t.color("red") 
     t.bye() 
    else: 
     pass 
    t.forward(10) 
    badpos.append(t.pos) 

def k2(): 
    t.left(90) 

def k3(): 
    t.right(90) 

t.onkey(k1, "Up") 
t.onkey(k2, "Left") 
t.onkey(k3, "Right") 

listen() 
mainloop() 

ответ

0

Проблема в том, что вы звоните t.forward(10) после того как вы выключению окно черепаха с t.bye(). Ниже моя переделка вашего кода, чтобы разобраться с различными проблемами и получить его в основном работает:

from turtle import Turtle, Screen 

def k1(): 
    turtle.forward(10) 

    position = (int(turtle.xcor()), int(turtle.ycor())) 

    if position in badpos: 
     turtle.color("red") 
     screen.bye() 

    badpos.add(position) 

def k2(): 
    turtle.left(90) 

def k3(): 
    turtle.right(90) 

turtle = Turtle(shape="turtle") 

badpos = set() 

screen = Screen() 
screen.setup(1200, 700) 
screen.title("Turtle Keys") 

screen.onkey(k1, "Up") 
screen.onkey(k2, "Left") 
screen.onkey(k3, "Right") 

screen.listen() 

screen.mainloop() 

Я бросил turns логики, которая, казалась неполной, так как переменная turns никогда не изменял свое значения. Вам нужно будет добавить обратно намеченную логику, если вам все еще нужно.

Смежные вопросы