1 回答

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
除了while True:@martineau 提供的“永遠(yuǎn)不要在基于事件的環(huán)境中使用”建議之外,您無(wú)需將“信號(hào)”庫(kù)拖到代碼中,因?yàn)槟梢允褂胦ntimer()事件處理它。
我需要一段代碼,或者至少需要一個(gè)循環(huán)來(lái)保持一個(gè)部分的重復(fù)。
為了解決這個(gè)問(wèn)題,我用一個(gè)簡(jiǎn)單的游戲替換了我之前的示例代碼,該游戲顯示一個(gè)字母,并會(huì)不斷在屏幕上移動(dòng)它并每?jī)擅敫淖兯念伾?,直到您輸入該字母。之后,它將更改為不同的字母并繼續(xù):
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()
確保在輸入之前單擊窗口以使其偵聽(tīng)輸入。
希望這會(huì)給你一些想法,如何在不使用while True:循環(huán)的情況下解決更復(fù)雜的問(wèn)題?;蛘咧辽傧蚰故救绾卧O(shè)置所有onkey()事件分配和處理程序,而無(wú)需為字母表中的每個(gè)字母重寫(xiě)相同的代碼......
添加回答
舉報(bào)