Черепаха Питон перестала слушать

#python-3.x #turtle-graphics

#python-3.x #черепаха-графика

Вопрос:

Я хочу создать приложение для рисования, которое использует клавиши 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()
 

Заранее благодарю вас

Редактировать: я также попытался заменить turtle.simpledialog.askstring() функцию textinput() функцией, которую я нашел, и она по-прежнему не реагирует на привязки клавиш

Комментарии:

1. В Linux код показывает только диалоговое окно с указателем. Он ничего не делает с нажатиями клавиш.

2. @codezombie что вы имеете в виду?

3. Я имею в виду, что сочетания клавиш не работают.

Ответ №1:

Когда вы это сделаете:

 turtle.listen()
 

вы делаете свое окно turtle прослушивателем событий клавиатуры. Но когда вы вызываете:

  data = turtle.simpledialog.askstring("Change Color", "Change Color to:")
 

или textinput() всплывающее окно становится прослушивателем событий клавиатуры. Поэтому, когда вы закончите с пользовательским диалоговым окном, вызовите:

 turtle.listen()
 

и снова после этого. Это должно позволить вашим событиям turtle keyboard работать по-прежнему. Пересмотренный кодекс:

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

Комментарии:

1. Спасибо @cdlane. Кроме того, я исправил это сам, но спасибо вам за ответ. Мне понравился ваш ответ, так как он был очень информативным. Еще раз спасибо вам

2. Если вам интересно, я импортировал tkinter, и он волшебным образом сработал