2016-08-18 4 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.

следует заменить, что 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 себе посетить этот introduction to tkinter

, если вы хотите, чтобы ярлык перезаписывается каждый раз он обновляется, вы должны использовать метод destroy() для удаления, а затем заменить этикетки например:

#!/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 в моем коде, но результат просто непрерывно печатает все больше и больше строк. –

Смежные вопросы