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

但我不知道如何将滑块的值作为PWM信号编号'0-255‘传输到GPIO管脚。
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终端时,我看到以下错误:
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引脚?
发布于 2021-04-16 20:24:27
我不知道你是否还需要awnser,但我前几天遇到了同样的问题,我解决这个问题的方法是使用不同的gpio模式。下面的脚本可以工作:
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()显然,您需要将引脚更改为您使用的引脚。我还给出了一个销毁窗口并重置引脚的按钮的示例。希望这对你或其他有同样问题的人有所帮助。
https://stackoverflow.com/questions/61137689
复制相似问题