2016-08-18 78 views
4

當我運行我的tkinter代碼來測量Adafruit的溫度。當我運行我的代碼時,tkinter會打開一個窗口,但窗口上不會顯示任何內容。我之前使用過tkinter,而且我已經有了應該出現的東西,但不是在這個特定的代碼中。運行時Tkinter窗口空白

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

import Adafruit_DHT as dht 
import time 
from Tkinter import * 

root = Tk() 
k= StringVar() 
num = 1 
thelabel = Label(root, textvariable=k) 
thelabel.pack 

def READ(): 
    h,t = dht.read_retry(dht.DHT22, 4) 
    newtext = "Temp=%s*C Humidity=%s" %(t,h) 
    k.set(str(newtext)) 
    print newtext #I added this line to make sure that newtext actually had the values I wanted 

def read30seconds(): 
    READ() 
    root.after(30000, read30seconds) 

read30seconds() 
root.mainloop() 

爲了闡明在READ中的打印行確實運行了30秒。

回答

4

這是因爲您沒有將它打包在窗口中,而是將它打印在python shell中。

你應該替換print newtext有:

w = Label(root, text=newtext) 
w.pack() 

工作的代碼應該是這樣的:

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

import Adafruit_DHT as dht 
import time 
from Tkinter import * 

root = Tk() 
k= StringVar() 
num = 1 
thelabel = Label(root, textvariable=k) 
thelabel.pack 

def READ(): 
    h,t = dht.read_retry(dht.DHT22, 4) 
    newtext = "Temp=%s*C Humidity=%s" %(t,h) 
    k.set(str(newtext)) 
    w = Label(root, text=newtext) 
    w.pack() 


def read30seconds(): 
    READ() 
    root.after(30000, read30seconds) 

read30seconds() 
root.mainloop() 

注意,這是圖形來講一個非常基本的代碼。 瞭解更多有關此主題的此次訪問tkinter label tutorial 和了解更多關於Tkinter的本身,如果你想在標籤被覆蓋每次它被刷新,你應該使用destroy()方法刪除,然後更換標籤訪問該introduction to tkinter

像這樣:

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

import Adafruit_DHT as dht 
import time 
from Tkinter import * 

root = Tk() 
k= StringVar() 
num = 1 
thelabel = Label(root, textvariable=k) 
thelabel.pack 

def READ(): 
    global w 
    h,t = dht.read_retry(dht.DHT22, 4) 
    newtext = "Temp=%s*C Humidity=%s" %(t,h) 
    k.set(str(newtext)) 
    print newtext #I added this line to make sure that newtext actually had the values I wanted 

def read30seconds(): 
    READ() 
    try: w.destroy() 
    except: pass 
    root.after(30000, read30seconds) 

read30seconds() 
root.mainloop() 
+0

這是非常有用的,但你有任何想法如何使它取代溫度和溼度線?這就是爲什麼我在我的代碼中有k.set,但結果只是連續打印越來越多的行。 –