基于图形 tkinter 和import rpi_ws281x as rpi的树莓派的综合应用

基于图形 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)
  1. parent是单选按钮的父容器。
  2. text参数用于设置单选按钮旁边显示的文本。
  3. variable参数通常用于关联一个Tkinter变量,以便跟踪用户选择的单选按钮
  4. 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)
  1. parent是滑动条的父容器。
  2. from_和to参数用于设置滑动条的取值范围。
  3. orient参数用于指定滑动条的方向,可以是水平(orient=‘horizontal’)或垂直(orient=‘vertical’)
  4. variable参数通常用于关联一个Tkinter变量,以便跟踪滑动条当前的值
  5. 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 效果图

在这里插入图片描述
视频效果图

彩色灯控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数贾电子科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值