2016-08-15 57 views
-2

我有2個密碼。第二個是基於第一個。不幸的是,由於某種原因,第二個人即使是第一個人也不行。爲什麼這些tkinter程序的行爲不一樣?

首先代碼:

import time 
from Tkinter import * 

root = Tk() 
t=StringVar() 
num=1 
t.set(str(num) 
thelabel = Label(root, textvariable=t).pack() 

def printnum (x): 
    while x<= 100: 
     t.set(str(x)) 
     x += 1 
     root.update() 
     time.sleep(30) 

printnum(num) 
root.mainloop() 

此代碼的工作就像一個魅力。這是另一個。

二碼:

#!/usr/bin/python 
# -*- coding: latin-1 -*- 

import Adafruit_DHT as dht 
import time 
from Tkinter import * 

root = Tk() 
k=StringVar() 
num = 1 
k.set(str(num)) 
thelabel = Label(root, textvariable=k).pack 
def printnum(x): 
    while x <= 10000000000000: 
     h,t = dht.read_retry(dht.DHT22, 4) 
     newtext = "Temp%s*C Humidity=%s" %(t,h) 
     k.set(newtext) 
     x += 1 
     root.update 
     time.sleep(30) 

printnum(num) 
root.mainloop() 

的代碼運行,但它不會做任何事情,就像其他的代碼確實沒有窗口彈出。請幫助我無法弄清楚如何解決這個問題。或者爲什麼第一個工作,第二個不工作。

+0

'浮object' ...'t'是一個浮動,而不是一個STRINGVAR,因爲你再使用't'在'd,T = DHT ...'和丟棄它曾經是STRINGVAR 。 –

+0

第一碼缺少最後括號上't.set(STR(NUM)'' –

+0

T = STRINGVAR()''不過是newtext'浮 –

回答

1

root.update沒有做任何事情。您需要添加()

root.update() 

話雖這麼說,你的算法是錯誤的方式在運行Tkinter的週期性任務。見https://stackoverflow.com/a/37681471/7432

+0

非常感謝你 –

3

你與溫度read_retry覆蓋在這條線T的前值:

h,t = dht.read_retry(dht.DHT22, 4) 

然後,當你嘗試調用sett現在是一個浮動,所以沒有一個設置方法。對其中一個使用不同的變量名稱而不是t

+0

我固定覆蓋的錯誤,它仍然不工作,我編輯它放回我的問題 –

+0

見@。 BryanOakley的反應,我相信這是錯誤的下一部分。 – James