Turtle.onkeypress不工作(Python)

时间:2017-08-07 11:08:26

标签: python turtle-graphics

我对Python非常陌生,并且在Python学习课程中制作了几个小游戏,但从未在家中进行过。所以最近我开始制作游戏,但仅仅10分钟后我偶然发现了一个问题:

当我按下" W"虽然我在代码中写了onkeypress。 亲眼看看:

(它是专为全屏设计的)

import turtle

s = turtle.Screen()

g = turtle.Turtle()

t = turtle.Turtle()

#Ground

t.speed(0)

t.up()

t.goto(-1000,-200)

t.down()

t.goto(1000,-200)


#Player

g.speed(0)

PlayerX = -600

def moveX():

    g.clear()

    global PlayerX

    g.up()

    g.goto(PlayerX,-99)

    g.down()

    g.color("Slate Gray")

    g.begin_fill()

    g.circle(-50)

    g.end_fill()

    PlayerX = PlayerX - 1




turtle.onkeypress(moveX, "w")

moveX()

顺便说一下,我完全清楚我还没有向后退一步。

4 个答案:

答案 0 :(得分:2)

除了@ doctorlove关于添加listen()以允许窗口接收键盘事件的更正(+1)之外,还有几条评论:

首先,用鼠标点击窗口使其激活,否则它不会响应键盘。其次,在事件处理期间停用事件处理程序并在出路时重新激活它可能会有所帮助,以避免在有人反复按键快速时出现问题。

这是第二条评论以及其他一些代码建议:

from turtle import Turtle, Screen

screen = Screen()
screen.setup(1200, 500)

# Ground

ground = Turtle()
ground.speed('fastest')

ground.penup()
ground.goto(-1000, -200)
ground.pendown()
ground.forward(2000)

# Player

player = Turtle()
player.speed('fastest')

PlayerX = -600

def moveX():
    global PlayerX

    screen.onkeypress(None, "w")  # disable handler in handler
    player.clear()
    player.penup()
    player.goto(PlayerX, -99)
    player.pendown()
    player.color("Slate Gray")
    player.begin_fill()
    player.circle(-50)
    player.end_fill()

    PlayerX -= 1

    screen.onkeypress(moveX, "w")  # reenable handler

screen.listen()

moveX()

screen.mainloop()  # change import & use turtle.mainloop() if Python 2

mainloop()不需要运行,但程序将在您没有它的初始moveX()电话后退出。 mainloop()将控制权转交给Tk事件处理程序,因此如果没有它,某些事件可能无法启动。

如果这是Python 2,您需要将onkeypress()更改为onkey(),并更改mainloop()的调用方式。

答案 1 :(得分:1)

我认为它被称为onkey而不是onkeypress。 此外,我认为您需要倾听(如果您希望它运行,请添加mainloop):

turtle.onkey(moveX, "w")
turtle.listen()
moveX() # draw things first
turtle.mainloop()

您可能需要重新访问正在使用的数字,以确保窗体上有形状。

答案 2 :(得分:0)

不确定更改是否适用于Python3。但是onkey函数似乎被拖动到Screen()下。

turtle.Screen()。onkey(movex,“ w”)

答案 3 :(得分:0)

使用我的python版本时,其他任何一个都不正确,这是对我有用的修改后的代码:

from turtle import Turtle, Screen, setpos, hideturtle

screen = Screen()
screen.setup(500, 500)

#Ground
t = Turtle()
t.speed(0)
t.up()
t.goto(-1000,-200)
t.down()
t.goto(1000,-200)

#Player
player = Turtle()
hideturtle()
player.speed(0)
setpos(0,0)
PlayerX = 0

def moveX():
    player.clear()
    global PlayerX
    player.up()
    player.goto(PlayerX,0)
    player.down()
    player.color("Slate Gray")
    player.begin_fill()
    player.circle(-50)
    player.end_fill()
    PlayerX = PlayerX - 1




screen.onkey(moveX, "w")

screen.listen()

(绝对可以改进)