如何使用Tkinter刷新窗口

时间:2016-06-08 19:50:59

标签: python tkinter

我正在尝试创建一个填充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()

我该怎么办?我会感激任何帮助。

2 个答案:

答案 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()

我还添加了一个递归,以便它不停地继续。