Python 乌龟停止倾听
Python Turtle has Stopped Listening
我想制作一个绘图应用程序,它使用 WSAD 键移动乌龟,使用 Q 和 E 键升高和降低笔,我尝试添加一个对话框以便您可以选择乌龟的颜色,但是在我改变颜色之后,乌龟不会响应 WSAD 键绑定。有人可以解释发生了什么以及如何解决这个问题吗?
代码如下:
import turtle
#WSAD to move
def up():
char.setheading(90)
char.forward(10)
def down():
char.setheading(270)
char.forward(10)
def goLeft():
char.setheading(180)
char.forward(10)
def goRight():
char.setheading(0)
char.forward(10)
#Raises and Lowers the pen
def lowerPen():
char.pendown()
def raisePen():
char.penup()
#change colors
def color():
data = turtle.simpledialog.askstring("Change Color", "Change Color to:")
char.color(data)
#Char info
char = turtle.Turtle()
char.speed(0)
screen = turtle.Screen()
screen.title("Arrow Paint")
#Make Turtle Listen to Keystrokes.
turtle.listen()
#Keybindings
turtle.onkey(color, "c")
turtle.onkey(up, "w")
turtle.onkey(down, "s")
turtle.onkey(goLeft, "a")
turtle.onkey(goRight, "d")
turtle.onkey(raisePen, "q")
turtle.onkey(lowerPen, "e")
turtle.done()
提前致谢
编辑:我也尝试用我找到的 textinput()
函数替换 turtle.simpledialog.askstring()
函数,但它仍然不会响应键绑定
当你这样做时:
turtle.listen()
你让乌龟 window 成为键盘事件的 侦听器 。但是当你调用时:
data = turtle.simpledialog.askstring("Change Color", "Change Color to:")
或textinput()
,弹出的window成为键盘事件的监听器。因此,当您完成用户对话框 window 后,请调用:
turtle.listen()
之后再说。这应该允许您的乌龟键盘事件像以前一样运行。修改后的代码:
from turtle import Screen, Turtle
# WSAD to move
def goUp():
char.setheading(90)
char.forward(10)
def goDown():
char.setheading(270)
char.forward(10)
def goLeft():
char.setheading(180)
char.forward(10)
def goRight():
char.setheading(0)
char.forward(10)
# Raise and Lowers the pen
def lowerPen():
char.pendown()
def raisePen():
char.penup()
# Change colors
def color():
data = screen.textinput("Change Color", "Change Color to:")
char.color(data)
screen.listen()
screen = Screen()
screen.title("Arrow Paint")
# Char info
char = Turtle()
char.speed('fastest')
# Keybindings
screen.onkey(color, "c")
screen.onkey(goUp, "w")
screen.onkey(goDown, "s")
screen.onkey(goLeft, "a")
screen.onkey(goRight, "d")
screen.onkey(raisePen, "q")
screen.onkey(lowerPen, "e")
# Make Turtle Listen to Keystrokes.
screen.listen()
screen.mainloop()
我想制作一个绘图应用程序,它使用 WSAD 键移动乌龟,使用 Q 和 E 键升高和降低笔,我尝试添加一个对话框以便您可以选择乌龟的颜色,但是在我改变颜色之后,乌龟不会响应 WSAD 键绑定。有人可以解释发生了什么以及如何解决这个问题吗?
代码如下:
import turtle
#WSAD to move
def up():
char.setheading(90)
char.forward(10)
def down():
char.setheading(270)
char.forward(10)
def goLeft():
char.setheading(180)
char.forward(10)
def goRight():
char.setheading(0)
char.forward(10)
#Raises and Lowers the pen
def lowerPen():
char.pendown()
def raisePen():
char.penup()
#change colors
def color():
data = turtle.simpledialog.askstring("Change Color", "Change Color to:")
char.color(data)
#Char info
char = turtle.Turtle()
char.speed(0)
screen = turtle.Screen()
screen.title("Arrow Paint")
#Make Turtle Listen to Keystrokes.
turtle.listen()
#Keybindings
turtle.onkey(color, "c")
turtle.onkey(up, "w")
turtle.onkey(down, "s")
turtle.onkey(goLeft, "a")
turtle.onkey(goRight, "d")
turtle.onkey(raisePen, "q")
turtle.onkey(lowerPen, "e")
turtle.done()
提前致谢
编辑:我也尝试用我找到的 textinput()
函数替换 turtle.simpledialog.askstring()
函数,但它仍然不会响应键绑定
当你这样做时:
turtle.listen()
你让乌龟 window 成为键盘事件的 侦听器 。但是当你调用时:
data = turtle.simpledialog.askstring("Change Color", "Change Color to:")
或textinput()
,弹出的window成为键盘事件的监听器。因此,当您完成用户对话框 window 后,请调用:
turtle.listen()
之后再说。这应该允许您的乌龟键盘事件像以前一样运行。修改后的代码:
from turtle import Screen, Turtle
# WSAD to move
def goUp():
char.setheading(90)
char.forward(10)
def goDown():
char.setheading(270)
char.forward(10)
def goLeft():
char.setheading(180)
char.forward(10)
def goRight():
char.setheading(0)
char.forward(10)
# Raise and Lowers the pen
def lowerPen():
char.pendown()
def raisePen():
char.penup()
# Change colors
def color():
data = screen.textinput("Change Color", "Change Color to:")
char.color(data)
screen.listen()
screen = Screen()
screen.title("Arrow Paint")
# Char info
char = Turtle()
char.speed('fastest')
# Keybindings
screen.onkey(color, "c")
screen.onkey(goUp, "w")
screen.onkey(goDown, "s")
screen.onkey(goLeft, "a")
screen.onkey(goRight, "d")
screen.onkey(raisePen, "q")
screen.onkey(lowerPen, "e")
# Make Turtle Listen to Keystrokes.
screen.listen()
screen.mainloop()