use*_*977 27 python user-interface tkinter pycharm
嘿,我是python的新手,我正在使用tkinter为我的gui.我在使用"after"方法时遇到了麻烦.目标是每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()
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我 - 问题肯定是frame.after(500):我不确定使用"frame"是否正确,我不知道500后面的参数是什么.
谢谢
dan*_*ano 37
你需要在延迟时间后调用一个函数作为第二个参数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 tiles
root.after(0, add_letter) # add_letter will run as soon as the mainloop starts.
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
您还需要通过重复调用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97628 次 |
| 最近记录: |