我目前正在使用Tkinter开发一个可以与Raspberry Pi板接口的GUI,我希望有一个按钮连接到raspberry pi,并获得Tkinter GUI上的输出指示,如Green表示on和Red表示关闭。
这是我试过的密码:-
from tkinter import *
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
buttonPin=11
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
win = Tk()
def ledON():
while True:
if GPIO.input(11) == 1:
ledButton["bg"] = "green"
else:
ledButton["bg"] = "red"
#I tried to use button widget in DISABLED state as a Indicator
ledButton = Button(win, text = " ", command = ledON,state=DISABLED, height = 2, width =8,bg="red")
ledButton.pack()
mainloop()请帮帮我。
发布于 2020-07-24 14:33:51
您不应该使用while True,因为它一直运行,它阻止从系统获取键/鼠标事件的mainloop,将事件发送到小部件,(再)绘制小部件等等。如果阻止mainloop,那么它就不能工作,窗口冻结。
您可以使用win.after(millisecond, function_name)重复功能而不阻塞mainloop。
import tkinter as tk # PEP8: `import *` is not preferred
import RPi.GPIO as GPIO
# --- function ---
def my_function():
if GPIO.input(11) == 1:
led["bg"] = "green"
else:
led["bg"] = "red"
# repeate function after 100ms (0.1s)
win.after(100, my_function)
# -- main ---
GPIO.setmode(GPIO.BOARD)
buttonPin=11
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
win = tk.Tk()
led = tk.Label(win, text=" ", bg="red")
led.pack()
# run function first time
my_function()
mainloop()BTW:如果您真的需要使用while True或运行长期运行的代码,那么您可以使用win.update()强制mainloop更新并重新绘制它们。
https://stackoverflow.com/questions/63072916
复制相似问题