2017-02-08 3 views
0

Mit Python: Ich versuche, ein Spiel zu machen, wo die Schildkröte nicht seine Schritte zurückverfolgen muss (ein bisschen wie Einzelspieler Tron), aber ich bekomme 'Ausnahme in Tkinter Rückruf 'wenn ich versuche, mein Programm zu starten. der Fehler ist:Python Turtle-Programm stirbt mit 'Ausnahme in Tkinter Rückruf' Fehler

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 

und mein Programm ist:

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

Antwort

0

Das Problem ist, dass Sie die Schildkröte Fenster t.forward(10) Nachdem Sie Abschaltung mit t.bye() sind aufgerufen wird. Unten ist mein Nacharbeiten des Codes verschiedene Probleme zu klären, und es ist im Grunde die Arbeit an:

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

ich die turns Logik fallen gelassen habe, wie die unvollständige schien, da die turns Variable nie seinen Wert verändert. Sie müssen die gewünschte Logik hinzufügen, wenn Sie sie noch benötigen.