簡體   English   中英

如何使用Tkinter刷新窗口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM