tkinter:如何使用方法

嘿,我是新来的python,并使用tkinter我的贵族。 我在使用“之后”方法时遇到了问题。 目标是每5秒钟出现一个随机字母。

这是我的代码:

import random import time from tkinter import * root = Tk() w = Label(root, text="GAME") w.pack() frame = Frame(root, width=300, height=300) frame.pack() L1 = Label(root, text="User Name") L1.pack(side=LEFT) E1 = Entry(root, bd =5) E1.pack(side=LEFT) tiles_letter = ['a', 'b', 'c', 'd', 'e'] while len(tiles_letter) > 0: rand = random.choice(tiles_letter) tile_frame = Label(frame, text=rand) tile_frame.pack() frame.after(500) tiles_letter.remove(rand) # remove that tile from list of tiles root.mainloop() 

有人可以帮我 – 问题肯定是框架。(500)之后:我不确定用“框架”是否正确,我不知道500后面有什么论点。

谢谢

你需要给一个函数在延时之后作为第二个参数来调用:

(delay_ms,callback = None,* args)

注册在给定时间之后调用的警报callback。

所以你真正想要做的是这样的:

 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 tiles root.after(0, add_letter) # add_letter will run as soon as the mainloop starts. root.mainloop() 

您还需要通过在callback函数内部重复调用来再次调用该函数,因为该函数只执行一次给定的函数。 这也在文档中注明:

每次调用此方法时,callback只调用一次。 要继续调用callback,您需要在其内部重新注册callback

请注意,只要您用尽tiles_letter所有条目,您的示例就会抛出exception,所以您需要更改逻辑以处理该案例,而不pipe您希望如何。 最简单的事情是在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