[英]How to refresh the window with 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()
我該怎么辦? 我將不勝感激。
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()
順便說一句,這是最終的工作形式:
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()
我還添加了一個遞歸,以便不間斷地進行下去。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.