首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tkinter虚拟LED

Tkinter虚拟LED
EN

Stack Overflow用户
提问于 2020-07-24 11:46:52
回答 1查看 3.3K关注 0票数 0

我目前正在使用Tkinter开发一个可以与Raspberry Pi板接口的GUI,我希望有一个按钮连接到raspberry pi,并获得Tkinter GUI上的输出指示,如Green表示on和Red表示关闭。

这是我试过的密码:-

代码语言:javascript
复制
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()

请帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-24 14:33:51

您不应该使用while True,因为它一直运行,它阻止从系统获取键/鼠标事件的mainloop,将事件发送到小部件,(再)绘制小部件等等。如果阻止mainloop,那么它就不能工作,窗口冻结。

您可以使用win.after(millisecond, function_name)重复功能而不阻塞mainloop

代码语言:javascript
复制
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更新并重新绘制它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63072916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档