我正在尝试创建一个填充0到9之间随机整数的窗口。经过一段时间后,窗口应该刷新并显示新随机选择的整数。我的代码完成第一步就好了,但在第二部分失败了。我查找了像after()这样的函数,但它仍然不起作用。代码如下所示:
from tkinter import *
from random import *
root= Tk()
col=170
row=45
num=[[randint(0,9) for i in range(col)] for j in range(row)]
for k in range(row):
theLabel= Label(root,text=' '.join(str(e) for e in num[k]))
theLabel.pack()
def ch():
num1=[[randint(0,9) for i in range(col)] for j in range(row)]
for k in range(row):
theLabel= Label(root,text=' '.join(str(e) for e in num1[k]))
theLabel.pack()
root.after(5000,ch())
root.mainloop()
我该怎么办?我会感激任何帮助。
答案 0 :(得分:2)
root.after(5000,ch())
立即调用ch
并注册五秒后执行的返回值。相反,尝试:
root.after(5000,ch)
编辑:您遇到的另一个问题是ch
会向窗口添加新标签,但旧标签仍然存在。由于您有45行开头,新的行会显示在屏幕下方,可能会在屏幕外显示,因此您不会注意到它们已经出现。
如果您希望新号码替换旧号码,请不要创建新标签 - 只需重新配置现有号码即可获得新文字。
from tkinter import *
from random import *
root= Tk()
col=10
row=10
num=[[randint(0,9) for i in range(col)] for j in range(row)]
labels = []
for k in range(row):
theLabel= Label(root,text=' '.join(str(e) for e in num[k]))
theLabel.pack()
labels.append(theLabel)
def ch():
for label in labels:
row = [randint(0,9) for i in range(col)]
label.config(text = ' '.join(str(e) for e in row))
root.after(5000,ch)
root.mainloop()
答案 1 :(得分:0)
from tkinter import *
from random import *
root=Tk()
col=200
row=57
num=[randint(0,9) for i in range(col*row)]
st=""
for k in range(0,col*row,col):
st=st + (' '.join(str(e) for e in num[k:k+col])) + '\n'
theLabel= Label(root,text=st)
theLabel.pack()
def ch():
st1=""
num1=[randint(0,9) for i in range(col*row)]
for k in range(0,col*row,col):
st1=st1 + (' '.join(str(e) for e in num1[k:k+col])) + '\n'
theLabel.config(text=st1)
theLabel.pack()
root.after(1000,ch)
root.after(1000,ch)
root.mainloop()
我还添加了一个递归,以便它不停地继续。