2016-08-15 50 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

相关问题