- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在制作一个带有 GUI 的 python 脚本,使用 Tkinter 来控制带有 Raspberry Pi 的 LED 灯条。 strip 连接到 mosfets,它们连接到 GPIO 端口。
到目前为止,我有:一个 GUI,每个 channel 都有开/关按钮,这可以启动或停止 pwm 输出。我有一个 slider (刻度)耦合到一个输入框,其中 pwm 值从 0 更改为 100,您可以移动 slider 或在输入框中输入一个值,当更改一个时它们都会改变。这还会自动将输出 DutyCycle 从 0 更新到 100,因此您可以以 100 步完全调暗 channel 的颜色,并在您移动 slider 时看到它变暗。
现在我已经使用 Tkinter.colorchooser 模块添加了一个按钮,让我可以使用内置的颜色选择器来选择颜色。当我选择一种颜色时,该模块返回一个由 rgb 值和一个十六进制值组成的元组,如下所示:
{214.8359375 215.83984375 214.8359375} #d6d7d6
我只能获取 rgb 三元组或十六进制值并将其放入变量中,但这就是我卡住的地方。
我的 pwm 电路使用 0-100 的值,没有小数。所以我开始只获取 rgb 三元组并将其值除以 255 再乘以 100 得到 0-255 到 0-100 的转换。但它仍然有很多我不需要/不想要的小数。并且 3 个颜色值仅由空格分隔。
现在我如何获取那个三元组并将其转换为 3 个不带小数的独立变量,这样我就可以将每个变量放入其所需的输入框中并使 slider 移动并更改 LED 占空比。
我试过拆分元组,但它给了我一些类似预期值的东西,但我认为那是因为元组没有逗号
获取十六进制值并将其转换为单独的值会更容易吗?我希望任何人都可以帮助我,我现在有点卡住了。
谢谢。
更新:
def pickcolor1():
(triple1,hexstr1) = askcolor(initialcolor='#000000')
if triple1:
triple1pwm = [x / 255.0 * 100 for x in triple1]
colorlabel1 = Label(mGui,text=triple1pwm).grid(row=14,column=0,columnspan=34)
pickcolorbutton1 = Button(mGui,text='Pick color',width=1,command=pickcolor1).grid(row=13,column=1,columnspan=4,sticky=W+E)
将颜色选择器的所有 slider 设置为 0,它会给出:[0.0, 0.0, 0.0]
所以我还需要去掉括号? [ ]
所有 slider 都为 255,它给出:[100.390625, 100.390625, 100.390625]
更新2:
我将值分开并放入不同的标签中,稍后将是输入框
def pickcolor1():
(triple1,hexstr1) = askcolor(initialcolor='#000000')
if triple1:
triple1pwm = [x / 255.0 * 100 for x in triple1]
colorlabelr1 = Label(mGui,text=triple1pwm[0]).grid(row=14,column=0,columnspan=34)
colorlabelg1 = Label(mGui,text=triple1pwm[1]).grid(row=15,column=0,columnspan=34)
colorlabelb1 = Label(mGui,text=triple1pwm[2]).grid(row=16,column=0,columnspan=34)
print(triple1pwm[0])
print(triple1pwm[1])
print(triple1pwm[2])
pickcolorbutton1 = Button(mGui,text='Pick color',width=1,command=pickcolor1).grid(row=13,column=1,columnspan=4,sticky=W+E)
现在只需要向下舍入就可以了
更新3:
现在将每个值四舍五入并将其放入输入框中,值后仍然有 .0。
def pickcolor1():
(triple1,hexstr1) = askcolor(initialcolor='#000000')
if triple1:
triplepwm1 = [x // 2.55 for x in triple1]
pwmr1 = StringVar()
pwmg1 = StringVar()
pwmb1 = StringVar()
pwmr1.set(triplepwm1[0])
pwmg1.set(triplepwm1[1])
pwmb1.set(triplepwm1[2])
pickentryr1 = Entry(mGui,textvariable=pwmr1).grid(row=14,column=0,columnspan=34)
pickentryg1 = Entry(mGui,textvariable=pwmg1).grid(row=15,column=0,columnspan=34)
pickentryb1 = Entry(mGui,textvariable=pwmb1).grid(row=16,column=0,columnspan=34)
print(triplepwm1[0])
print(triplepwm1[1])
print(triplepwm1[2])
pickbutton1 = Button(mGui,text='Pick color',width=1,command=pickcolor1).grid(row=13,column=1,columnspan=4,sticky=W+E)
最佳答案
with all sliders to 255 it gives: [100.390625, 100.390625, 100.390625]
这是打印命令的产物。这意味着您有一个列表,列表中包含三个值。
如果在一行中打印三个变量,您将得到三个由空格分隔的值
>>> print r, g, b
100.390625 100.390625 100.390625
您的数学运算将列表的值强制为 float 。你想要它作为整数。当你向下舍入时,你将整数值放入浮点变量中,这些变量仍然会随着最终的 .0 变化输出
triple1pwm = [x / 255.0 * 100 for x in triple1]
到
triple1pwm = [int(x*100/255) for x in triple1]
这将向下舍入为整数值。
你也可以使用
triple1pwm = [x*100//255 for x in triple1]
这是因为你的操作顺序
>>> 25 // 255 * 100
0
>>> 25 * 100 // 255
9
请注意,只要 x 是 float ,或者您使用 100.0 或 255.0,那么您将得到一个 float 结果,这样
>>> 25.0 * 100 // 255
9.0
同时
>>> int(25.0 * 100 / 255)
9
现在你可以说
r, g, b = triple1pwm
或
r, g, b = [int(x*100/255) for x in triple1]
关于Python:如何将 rgb 或 hex 值转换为单一颜色值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36066360/
我想在单个 View 中显示文本、图像。也请帮助我 我想从我的类(class)而不是 xml 提供图像的 src 请帮助谢谢 最佳答案 你可以为此使用Button Button b=new Butto
我有一个消息模型,管理员和用户都可以创建消息。但对于管理员和用户来说,有单独的模型,称为管理员和用户。 消息模型有一个名为“created_by”的列,用于存储创建者的 ID。现在的问题是我如何与 M
我无法为菜单资源充气,并且无法将其附加到我的 Activity 的工具栏上。 这似乎很简单,但是我想我缺少明显的东西。我正在使用NavGraph,所以我不知道这是否影响工具栏? 有人看到我做错了吗?
我正在开发一个应用程序,它有一个 MainActivity 并且有许多用于医院、诊所的 ImageViews ... 当按下其中一个时,它会带你到一个新的 Activity DisplayActivi
我会尽量保持简短,但我需要一些建议。 我所在的团队正在并行开发适用于 android、iphone 和 wp7 的应用程序。我们有一个设计团队,可以为所有三个平台提出一个单一的设计。 最新应用程序的设
我正在使用 Josh Smith 中的示例.他有一个显示 CustomerViewModel 列表的 WorkspaceViewModel。他使用相同的 ViewModel 来显示所有客户和编辑一个客
我是 Azure 新手,正在尝试了解各种服务,目前我正在尝试了解移动服务及其各种功能,例如身份验证和推送。 移动服务是否仅支持一种操作系统上的一个应用程序,还是可以在多个操作系统(Android、iO
我在 Stoyan Stefanov 的书中读到了关于单一变量模式的内容。 JSLint 也很好。 但我在我的代码中注意到我可能会重载此模式。整个我的 .js 文件,整个脚本只是一个大变量。 例如:
我想在一个 View 中添加多个具有不同不透明度的阴影。阴影的规范如下: Y 偏移量为 4,模糊半径为 1 Y 偏移量为 10,模糊半径为 10 Y 偏移量为 2,模糊半径为 4 1 的模糊半径,1
我们有几个 API,我们希望通过客户端凭据流授予对客户端的访问权限。流程会像这样。 客户端根据某个范围从 is4 获取 token 客户端使用 token 访问第一个 API 客户端需要使用相同的 t
我是 ruby on rails 的新手。我正在尝试在 ruby on rails 上设计一个注册表单,该表单具有 Basic 和 Paid 用户的单选按钮。当用户点击付费并点击提交时,应该会
我用 Entity Framework 6 开发了一个项目,该项目使用 MySQL 作为数据库。在我的 Windows 系统上,该项目正在运行。现在我试图在我的 linux 机器上移动那个项目。为了运
我正在为我的电子商务应用程序创 build 计。它将拥有由 AWS Lambda 支持的多项服务。 Orderservice、InventoryService、PaymentService、Loggi
我目前正在开发一个执行以下操作的单 View 应用程序: 使用 CoreLocation 获取用户位置 将他们的经/纬度发送到 API 以 JSON 格式返回潮汐数据 深入研究 JSON 中的对象和键
我想托管各种 Angular2 应用程序,这些应用程序使用相同的框架包和来自根域和子域的 node_modules: domain.com subdomain.domain.com sub2.doma
我正在尝试使用 Git Publisher 插件来标记带有 $BUILD_TAG 的成功构建,但我无法找出它将接受的 Target remote name 的值。如果我在 GIT 配置中使用 Repo
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
有一个带有许多控件的 View (窗口),以简化: 此 View 用于显示和编辑多个配置: public class ViewModel: INotifyPropertyChanged
我有一个 textView 和类似的文本 “这是带有 KeyWord 和 Link 浏览的简单文本” 在上面的文字中我想制作.. 点击链接可打开该网址和点击该关键字在我的应用程序中打开一个新 Acti
我在我现有的应用程序中有一个任务,我们有 2 个不同的数据库,一个在 SQL Server 中,另一个在 Oracle 中,但是两个模式是相同的。 目前我们有一个使用 Entity Framework
我是一名优秀的程序员,十分优秀!