首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tkinter Sliders和Raspberry Pi 4 GPIO接口

Tkinter Sliders和Raspberry Pi 4 GPIO接口
EN

Stack Overflow用户
提问于 2020-04-10 17:44:32
回答 1查看 365关注 0票数 0

我是Python初学者,但对学习Tkinter的UI设计和通过官方触摸屏控制屏幕上的东西很感兴趣。基础和有趣的项目是最好的方式。所以我决定在屏幕上放置3个滑块,每个滑块代表一种颜色,红色,绿色和蓝色。根据这3个滑块的反馈,我正在尝试点亮我的RGB led模块。因此,它们应该与GPIO引脚接口。

但我不知道如何将滑块的值作为PWM信号编号'0-255‘传输到GPIO管脚。

代码语言:javascript
复制
from Tkinter import *
import tkFont
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)


win = Tk()

myFont = tkFont.Font(family = 'Helvetica', size = 36, weight = 'bold')

def exitProgram():
        GPIO.cleanup()
    win.quit()  

def setColor():
    val = int(red_scaleget())
    GPIO.output(17,val)
    val2 = int(green_scaleget())
    GPIO.output(27,val2)
    val3 = int(blue_scaleget())
    GPIO.output(22,val3)


win.title("RGB COLOR CHANGER")
win.geometry('800x480')

exitButton  = Button(win, text = "Exit", font = myFont, command = exitProgram, height =2 , width = 6)
exitButton.pack(side = BOTTOM)

w = Label(win, text="RED")
w.place(x=375, y=5)

w = Label(win, text="BLUE")
w.place(x=381, y=90)

w = Label(win, text="GREEN")
w.place(x=378, y=190)


red_scale = Scale(win, from_=0, to=255,orient=HORIZONTAL,length=700,bg='red',command = setColor)
red_scale.place(x=50, y=30)

green_scale= Scale(win, from_=0, to=255,orient=HORIZONTAL,length=700,bg='green',command = setColor)
green_scale.place(x=50,y=120)

blue_scale= Scale(win, from_=0, to=255,orient=HORIZONTAL,length=700,bg='blue',command = setColor)
blue_scale.place(x=50, y=220)



mainloop()

虽然GUI运行良好且没有错误,但我在RGB led上看不到任何变化,当我检查运行phyton代码的linux终端时,我看到以下错误:

代码语言:javascript
复制
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1550, in __call__
    return self.func(*args)
TypeError: setColor() takes no arguments (1 given)

谁能告诉我这里发生了什么,我如何从滑块获得值,并将其作为PWM信号传输到我的GPIO引脚?

EN

回答 1

Stack Overflow用户

发布于 2021-04-16 20:24:27

我不知道你是否还需要awnser,但我前几天遇到了同样的问题,我解决这个问题的方法是使用不同的gpio模式。下面的脚本可以工作:

代码语言:javascript
复制
def white(value):
    print(value)
    pi=pigpio.pi()
    pi.set_PWM_dutycycle(21, value)
    pi.stop()

def winCleanup():
    pi=pigpio.pi()
    pi.set_PWM_dutycycle(19, 0)
    pi.set_PWM_dutycycle(13, 0)
    pi.set_PWM_dutycycle(20, 0)
    pi.set_PWM_dutycycle(21, 0)
    pi.stop()
    win.destroy()

White = Scale(win,sliderlength=15,showvalue=0, 
sliderrelief=FLAT,troughcolor='white',width=10, from_=0, to=255, orient=HORIZONTAL, 
bg= 
'yellow',  bd=3, font=Font, label="Warm White",length=1670, command=white, 
relief=SOLID) 
White.grid()

显然,您需要将引脚更改为您使用的引脚。我还给出了一个销毁窗口并重置引脚的按钮的示例。希望这对你或其他有同样问题的人有所帮助。

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

https://stackoverflow.com/questions/61137689

复制
相关文章

相似问题

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