2017-01-31 57 views
-1

Я новичок в Python. Я использую IDLE (используя python 2.7) на моем малиновом пи. Я не смог скомпилировать последнюю программу из моего учебника, игры с кошачьей мышью. Я получаю следующее сообщение об ошибке:Ошибка атрибута Python onkeypress

Traceback (most recent call last) : 
    File "/home/pi/pyth-prog/Python_Cat_and-mouse.py", line 47, in <module> window.onkeypress(up, "Up") 
AttributeError: '__Screen' object has no attribute 'onkeypress' 

Мой код выглядит следующим образом:

import turtle 
import time 


boxsize =200 
caught= False 
score= 0 


#function that are called keypresses 
def up(): 
    mouse.forward(10) 
    checkbound() 


def left(): 
    mouse.left(45) 


def right(): 
    mouse.right(45) 


def back(): 
    mouse.back(10) 


def quitTurtles(): 
    window.bye() 


#stop the ;ouse fro; leaving the square set by box sizes 

def checkbound(): 
    global boxsize 
    if mouse.xcor() > boxsize: 
     mouse.goto(boxsize, mouse.ycor()) 
    if mouse.xcor() < -boxsize: 
     mouse.goto(-boxsize, mouse.ycor()) 
    if mouse.ycor() > boxsize: 
     mouse.goto(mouse.xcor(), boxsize) 
    if mouse.ycor < -boxsize: 
     mouse.goto(mouse.xcor(), -boxsize) 


#Set up screen 
window=turtle.Screen() 
mouse=turtle.Turtle() 
cat=turtle.Turtle() 
mouse.penup() 
mouse.penup() 
mouse.goto(100, 100) 


#add key listeners 
window.onkeypress(up, "Up") 
window.onkeypress(left, "Left") 
window.onkeypress(right, "Right") 
window.onkeypress(back, "Down") 
window.onkeypress(quitTurtles, "Escape") 


difficulty=window.numinput("Difficulty", "Enter a difficulty from easy (1), for hard (5) ", minval=1, maxval=5) 


window.listen() 




#main loop 
#note how it changes with difficulty 




while not caught: 
    cat.setheading(cat.towards(mouse)) 
    cat.forward(8+difficulty) 


    score=score+1 
    if cat.distance(mouse) < 5: 
     caught=True 
    time.sleep(0.2-(0.01*difficulty)) 
window.textinput("GAME OVER", "Well done. You scored:"+ str(score*difficulty)) 
window.bye() 
+2

Если вы хотите помочь устранению неполадок с вашим кодом, вам необходимо предоставить дополнительную информацию. См. [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). – glibdud

+0

Похоже, что «окно» - это не то, что вы думаете, но это невозможно сказать, не видя ваш код. – zondo

+0

Хотя хорошо, что вы теперь включили код, это много кода, который нужно пройти (см. Раздел «Минимальный» ссылки, которую я дал). У вас будет больше шансов получить помощь, если вы поможете другим помочь вам. – glibdud

ответ

0

I use IDLE(Using python 2.7) on my raspberry pi

turtle.py для Python 2.7 определяет только onkey() - onkeypress() вариант был добавлен в Python 3 (as был синонимом для onkey() под названием onkeyrelease())

Короткий ответ, попробуйте изменить onkeypress() на номер onkey().

После того, как вы пройти этот барьер, и numinput()textinput() также Python 3:

difficulty=window.numinput("Difficulty", "Enter a difficulty from easy (1), for hard (5) ", minval=1, maxval=5) 
... 
window.textinput("GAME OVER", "Well done. You scored:"+ str(score*difficulty)) 

поэтому они, возможно, придется иметь дело тоже.

0

Основано на turtle от Python 3.5.

Это не window., но нужду должно быть выполнен после turtle.Screen()

import turtle 

# --- based on turtle in Python 3.5 --- 

import tkSimpleDialog 

def numinput(title, prompt, default=None, minval=None, maxval=None): 
    return tkSimpleDialog.askfloat(title, prompt, initialvalue=default, 
            minvalue=minval, maxvalue=maxval) 

def textinput(title, prompt): 
    return tkSimpleDialog.askstring(title, prompt) 

# --- main --- 

window = turtle.Screen() 

# doesn't need `window.` but has to be executed after `turtle.Screen()` 

difficulty = numinput("Difficulty", "Enter a difficulty from easy (1), for hard (5) ", minval=1, maxval=5) 

textinput("GAME OVER", "Well done. You scored:" + str(0)) 

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

  • Нет связанных вопросов^_^