import tkinter import tkinter.font as font import RPi.GPIO as GPIO import dht11 import time import datetime root = tkinter.Tk() root.title("温度/湿度") root.geometry("240x120+10+50") labelFont = font.Font(size=30, weight="bold") var1 = tkinter.StringVar(root) var2 = tkinter.StringVar(root) t0 = "" h0 = "" # initialize GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # read data using pin 14 instance = dht11.DHT11(pin=14) # get sensor data def mainOpe(): count = 0 while True: global t0 global h0 result = instance.read() if result.is_valid(): data1 = "%-3.1f 度" % result.temperature if data1 != t0: var1.set(data1) label1 = tkinter.Label(root, textvariable=var1, font=labelFont, foreground="#000000") if result.temperature >= 30.0: label1 = tkinter.Label(root, textvariable=var1, font=labelFont, foreground="#ff0000") if result.temperature < 10.0: label1 = tkinter.Label(root, textvariable=var1, font=labelFont, foreground="#0000ff") label1.place(x=50, y=10) data2 = "%-3.1f %" % result.humidity if data2 != h0: var2.set(data2) label2 = tkinter.Label(root, textvariable=var2, font=labelFont, foreground="#000000") if result.humidity >= 60.0: label2 = tkinter.Label(root, textvariable=var2, font=labelFont, foreground="#3399ff") if result.humidity < 30.0: label2 = tkinter.Label(root, textvariable=var2, font=labelFont, foreground="#cc9900") label2.place(x=50, y=60) t0 = data1 h0 = data2 # print("Temperature: %-3.1f C" % result.temperature) # print("Humidity: %-3.1f %%" % result.humidity) break else: count += 1 if count > 100: print("error") break return # timer event def timer(): x = mainOpe() root.after(5000, timer) try: root.after(1000, timer) root.mainloop() except KeyboardInterrupt: print("Cleanup") GPIO.cleanup()