2014-02-05 68 views
0

我想看到不斷改變tkinter窗口中的標籤值。但是我沒有看到它,除非我在運行MS-CMD時發生鍵盤中斷,這給我顯示了標籤的最新分配值。 Plz告訴我.. &什麼是正確的代碼?蟒蛇標籤不動態改變

import random 
from Tkinter import * 

def server() : 
while True: 
    x= random.random() 
    print x 
    asensor.set(x) 



app=Tk() 
app.title("Server") 
app.geometry('400x300+200+100') 

b1=Button(app,text="Start Server",width=12,height=2,command=server) 
b1.pack() 

asensor=StringVar() 

l=Label(app,textvariable=asensor,height=3) 
l.pack() 

app.mainloop() 

回答

1

單擊按鈕時會調用函數server,但該函數包含無限循環。它只是繼續生成隨機數字併發送到asensor。您可能沒有看到它,因爲server函數與GUI在相同的線程中運行,並且它永遠不會給標籤更新機會。

如果您從代碼中刪除while True位,每次單擊按鈕時都會生成一個新號碼。那是你想要做的嗎?評論後


編輯由OP:

我明白了。在這種情況下,如下的代碼應改爲:

import random 
from Tkinter import Tk, Button, Label, StringVar 


def server(): 
    x = random.random() 
    print x 
    asensor.set(x) 


def slowmotion(): 
    server() 
    app.after(500, slowmotion) 


app = Tk() 
app.title("Server") 
app.geometry('400x300+200+100') 
b1 = Button(app, text="Start Server", width=12, height=2, command=slowmotion) 
b1.pack() 
asensor = StringVar() 
asensor.set('initial value') 
l = Label(app, textvariable=asensor, height=3) 
l.pack() 

app.mainloop() 

我還引入了一個新功能,slowmotion,它做了兩兩件事:1)調用server,這將更新顯示值,和2)安排其自身是在500毫秒內再次執行。當您第一次點擊按鈕時,第一次運行slowmotion

您的代碼的問題是它在主GUI線程中運行無限循環。這意味着一旦server正在運行,GUI不會停止,並且不會有機會顯示您要求它顯示的文本。

+0

不,我需要在while循環內運行它。我想看到在tkinter窗口中改變價值。是否有可能進行一些修改? – jonny789

+0

查看已更新回答:) – mbatchkarov