您需要给定一个在时间延迟后要调用的函数,作为第二个参数after:
after(delay_ms,callback = None,* args)
注册在给定时间后调用的警报回调。
因此,您真正想要做的是:
tiles_letter = ['a', 'b', 'c', 'd', 'e']def add_letter(): rand = random.choice(tiles_letter) tile_frame = Label(frame, text=rand) tile_frame.pack() root.after(500, add_letter) tiles_letter.remove(rand) # remove that tile from list of tilesroot.after(0, add_letter) # add_letter will run as soon as the mainloop starts.root.mainloop()
您还需要通过重复调用after回调函数内部来计划要再次调用的函数,因为after仅执行一次给定的函数。文档中也对此进行了说明:
对于此方法的每次调用,该回调仅被调用一次。要继续调用该回调,您需要在自身内部重新注册该回调
请注意,一旦您用完了中的所有条目,您的示例就会引发异常
tiles_letter,因此您需要更改逻辑以处理您想要的任何情况。最简单的方法是在的开头添加一个检查,
add_letter以确保列表不为空,
return即使列表为空:
def add_letter(): if not tiles_letter: return rand = random.choice(tiles_letter) tile_frame = Label(frame, text=rand) tile_frame.pack() root.after(500, add_letter) tiles_letter.remove(rand) # remove that tile from list of tiles



