1 回答
TA贡献1744条经验 获得超4个赞
除了while True:@martineau 提供的“永远不要在基于事件的环境中使用”建议之外,您无需将“信号”库拖到代码中,因为您可以使用ontimer()事件处理它。
我需要一段代码,或者至少需要一个循环来保持一个部分的重复。
为了解决这个问题,我用一个简单的游戏替换了我之前的示例代码,该游戏显示一个字母,并会不断在屏幕上移动它并每两秒改变它的颜色,直到您输入该字母。之后,它将更改为不同的字母并继续:
from turtle import Screen, Turtle
from random import shuffle, randrange
from itertools import cycle
WIDTH, HEIGHT = 600, 600
FONT_SIZE = 36
FONT = ('Arial', FONT_SIZE, 'bold')
LETTERS = list("abcdefghijklmnopqrstuvwxyz")
COLORS = ['red', 'blue', 'green', 'magenta', 'cyan', 'black', 'orange', 'gray']
def play():
global letter
if hit == letter:
letter = next(letters)
turtle.clear()
turtle.color(next(colors))
turtle.goto(randrange(FONT_SIZE - WIDTH/2, WIDTH/2 - FONT_SIZE), randrange(FONT_SIZE - HEIGHT/2, HEIGHT/2 - FONT_SIZE))
turtle.write(letter, font=FONT)
screen.ontimer(play, 2000)
letters = LETTERS
shuffle(letters)
letters = cycle(letters)
letter = next(letters)
colors = COLORS
shuffle(colors)
colors = cycle(colors)
hit = None
screen = Screen()
screen.setup(WIDTH, HEIGHT)
turtle = Turtle(visible=False)
turtle.penup()
for character in LETTERS:
def hit_character(character=character):
global hit
hit = character
screen.onkey(hit_character, character)
screen.listen()
play()
screen.mainloop()
确保在输入之前单击窗口以使其侦听输入。
希望这会给你一些想法,如何在不使用while True:循环的情况下解决更复杂的问题。或者至少向您展示如何设置所有onkey()事件分配和处理程序,而无需为字母表中的每个字母重写相同的代码......
添加回答
举报