基于图形 tkinter 和import rpi_ws281x as rpi的应用
1 tkinter 介绍
tkinter 是树莓派的自带的图形库,不需要特别去按照对应的图形库。
只需要按照我的博客“,正确安装了系统库就好了。
Tkinter是Python的标准GUI(图形用户界面)工具包之一,用于创建窗口和各种GUI应用程序。它是基于Tk GUI工具包的Python接口,可以用于开发跨平台的桌面应用程序。
Tkinter包含了一系列的控件(widgets),比如按钮、标签、文本框、列表框等,这些控件可以用来构建各种用户界面。它还提供了布局管理器(如pack、grid和place),用于将控件放置在窗口中并管理它们的位置和大小。
在开始之前,首先创建一个窗口,在窗口基础上绘制控件。
import tkinter as tk
import rpi_ws281x as rpi
import os
import time
# tkinter 窗口界面绘制
root= tk.Tk()
root.geometry("500x500+0+0")
root.title("RGB control")
2 按键-控制灯的状态
在Tkinter中,按键控件通常指的是Button(按钮)控件,它用于在GUI应用程序中创建可点击的按钮。用户可以通过单击按钮来触发与按钮相关联的操作或事件处理函数。除了Button控件,Tkinter还提供了其他一些按键相关的控件,比如Checkbutton(复选框)和Radiobutton(单选按钮),它们也可以被视为按键控件的一种扩展。
radio_button = tk.Radiobutton(parent, text='Radio Text', variable=radio_var, value=value)
- parent是单选按钮的父容器。
- text参数用于设置单选按钮旁边显示的文本。
- variable参数通常用于关联一个Tkinter变量,以便跟踪用户选择的单选按钮
- value参数用于指定单选按钮的值,不同的单选按钮应该具有不同的值。
def bt_clear():
global led_cnt
for i in range(led_cnt):
strip_1.setPixelColor(i,rpi.Color(0,0,0));
strip_1.show()
# 熄灭所有灯
clear_bn= tk.Button(root,text="灭灯",command=bt_clear,fg="red")
#button.pack()
clear_bn.grid(row=30,column=0,sticky=tk.E)
# 流水灯
def bt_flow():
global led_cnt
for i in range(led_cnt):
strip_1.setPixelColor(i,rpi.Color(rd_color_value,gn_color_value,bl_color_value));
strip_1.show()
time.sleep(0.1)
strip_1.setPixelColor(i,rpi.Color(0,0,0));
flow_bn= tk.Button(root,text="流水灯",command=bt_flow,fg="red")
#button.pack()
flow_bn.grid(row=30,column=70,sticky=tk.E)
# 闪烁灯
def bt_blink():
global led_cnt
for j in range(3):
for i in range(led_cnt):
strip_1.setPixelColor(i,rpi.Color(rd_color_value,gn_color_value,bl_color_value));
strip_1.show()
time.sleep(0.2)
for i in range(led_cnt):
strip_1.setPixelColor(i,rpi.Color(0,0,0));
strip_1.show()
time.sleep(0.2)
blink_bn= tk.Button(root,text="闪烁灯",command=bt_blink,fg="red")
#button.pack()
blink_bn.grid(row=30,column=100,sticky=tk.E)
3 滑动条- 调节灯的颜色
Scale 是 Tkinter 中的一个控件,用于创建滑动条,允许用户通过拖动滑块来选择数值。下面是一个简单的例子,展示了如何使用 Scale 控件:
slider = tk.Scale(parent, from_=start_value, to=end_value, orient=orientation, variable=var, command=callback_function)
- parent是滑动条的父容器。
- from_和to参数用于设置滑动条的取值范围。
- orient参数用于指定滑动条的方向,可以是水平(orient=‘horizontal’)或垂直(orient=‘vertical’)
- variable参数通常用于关联一个Tkinter变量,以便跟踪滑动条当前的值
- command参数用于指定当滑动条的值发生变化时要调用的回调函数。
# 滑动条调节函数
def rd_update(value):
global rd_color_value
rd_color_value=int(value)
def bl_update(value):
global bl_color_value
bl_color_value=int(value)
def gn_update(value):
global gn_color_value
gn_color_value=int(value)
# 颜色滑动条
rd_scale=tk.Scale(root,from_=0,to=255,orient=tk.HORIZONTAL,width=20,length=130,command=rd_update)
rd_scale.grid(row=200,column=0,sticky=tk.E)
rd_label=tk.Label(root,text="红色")
rd_label.grid(row=200,column=130,sticky=tk.E)
bl_scale=tk.Scale(root,from_=0,to=255,orient=tk.HORIZONTAL,length=130,width=20,command=bl_update)
bl_scale.grid(row=230,column=0,sticky=tk.E)
bl_label=tk.Label(root,text="蓝色")
bl_label.grid(row=230,column=130,sticky=tk.E)
gn_scale=tk.Scale(root,from_=0,to=255,orient=tk.HORIZONTAL,length=130,width=20,command=gn_update)
gn_scale.grid(row=260,column=0,sticky=tk.E)
gn_label=tk.Label(root,text="绿色")
gn_label.grid(row=260,column=130,sticky=tk.E)
4 灯初始化配置
#驱动rgb灯
# 颜色调节
rd_color_value=255;
bl_color_value=0;
gn_color_value=0;
# 以下可以不用改
# LED_COUNT_1 = 12 # 灯珠数量
led_cnt=12;
LED_PIN_1 = 18 # 确定引脚编号
LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10 # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest
LED_INVERT = False # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL_1 = 0 # set to '0' for GPIOs
# Create NeoPixel object with appropriate configuration.
strip_1 = rpi.PixelStrip(led_cnt, LED_PIN_1, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL_1)
# Intialize the library (must be called once before other functions).
strip_1.begin()
5 效果图
视频效果图
彩色灯控制