Событие onkey в Python 2.7, вызывающее цикл? - PullRequest
0 голосов
/ 28 апреля 2018
from turtle import *
def PleaseStop():
 SomeWord = input("Which word?")
Screen().onkey(PleaseStop,"a")
Screen().listen()

Нажатие «а» заставит программу спросить «Какое слово?» навсегда.

Нет способа остановить это, кроме закрытия программы. Как мне заставить onkey вызвать функцию только один раз?

Ответы [ 2 ]

0 голосов
/ 31 июля 2018

Не решает проблему. Печать в любом случае, input () повторяется вечно, даже ни с чем.

Я считаю, что @Acorn шел в правильном направлении, но приведенный пример неполон. Вот что я считаю более полным решением:

from turtle import Turtle, Screen, mainloop

def OnKeyA():
    screen.onkey(None, 'a')
    some_word = raw_input("Which word? ")
    turtle.write(some_word, font=('Arial', 18, 'normal'))

screen = Screen()
turtle = Turtle()

screen.onkey(OnKeyA, 'a')
print("Click on turtle window to make it active, then type 'a'")

screen.listen()
mainloop()

Обратите внимание, что этот подход неудобен, щелкая графическое окно черепахи, чтобы сделать его активным, нажимая «а», возвращаясь к окну консоли, чтобы напечатать слово. Если / когда вы переходите на Python 3, вы можете использовать функцию черепахи textinput() для запроса текста от пользователя без необходимости использовать input() с консоли.

0 голосов
/ 29 апреля 2018

Вам необходимо удалить привязки событий с помощью , вызвав onkey с None в качестве первого параметра :

import turtle

def OnKeyA():
    print 'Key "a" was pressed'
    turtle.Screen().onkey(None, 'a')

turtle.Screen().onkey(OnKeyA, 'a')
turtle.Screen().listen()
turtle.mainloop()
...