运行 时 Tkinter window 为空白
Tkinter window is blank when running
当我 运行 使用 Adafruit 测量温度的 tkinter 代码时。当我 运行 我的代码 tkinter 打开一个 window 但 window 上什么也没有出现。我以前用过 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 秒。
因为你没有打包在window中,而是打印在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 本身的更多信息,请访问此 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()
当我 运行 使用 Adafruit 测量温度的 tkinter 代码时。当我 运行 我的代码 tkinter 打开一个 window 但 window 上什么也没有出现。我以前用过 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 秒。
因为你没有打包在window中,而是打印在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 本身的更多信息,请访问此 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()