我正在设计一个与我的数据记录脚本兼容的Tkinter接口。两者仍然是WIP,但接近合并。该脚本用于Raspberry Pi,使用不同的传感器定期进行测量。在这种情况下,植物。
我有各种Entry小部件来访问我的变量(输入通道,测量间隔和每个平均值的测量值),所以我可以更改它们而无需重新编写脚本本身。
3个条目小部件与textvariables相关联: gpio_light1_entry,interval_light1_entry,amount_light1_entry
数据记录脚本使用的实际变量是: gpio_light1,interval_light1,amount_light1
我想定义一个函数(我将绑定到一个按钮。)。它检索输入窗口值(gpio_light1_entry.get())并更新脚本变量。
现在我可以使用:
gpio_light1 = gpio_light1_entry.get()
但是每株植物至少有12个变量。所以对它进行12次编码似乎对我来说效率很低。
我正在考虑使用for循环和列表。
settings_gpio1 = [gpio_light1, gpio_temp1, etc]
settings_gpio1_entry = [gpio_light1_entry, gpio_temp1_entry, etc]
但这有一些问题: 1-似乎更改列表中的值不会更改用于构造列表的变量。 2-我不知道如何使用“双”for循环来同时使用_entry和非条目列表。 3- _entry列表需要一个.get()函数来检索值,这个函数不能直接在列表上工作,但可以用for循环解决。
有没有人知道更有效或更简单的方法来实现我的目标?
答案 0 :(得分:1)
我建议你为每个Gpio访问创建一个类:
它自己的类应该包含访问硬件和显示它的值。 如果由于某种原因,你已经有了可用的gpios和条目列表,你可以这样做:
class Gpio:
def __init__(self,setting, entry):
self.setting = setting
self.entry = entry
def Get(self):
#Do whatever you need with self.entry
return 0
def __str__(self):
return self.setting
@staticmethod
def FromArray(names,settings, entries):
assert(len(settings) == len(entries) == len(names))
ret = {}
for i in range(len(settings)):
ret[names[i]] = Gpio(settings[i], entries[i])
return ret
在这里我举了一个随机的例子,我不知道你要使用什么值:
gpio_light1 = 33
gpio_light_entry = "hardware_address"
gpio_temp_entry = "0x80001234"
names = ["gpio_light1", "gpio_temp1"]
settings_gpio = [gpio_light1, "gpio_temp1"]
settings_gpio_entry = [gpio_light_entry, gpio_temp_entry]
access = Gpio.FromArray(names, settings_gpio, settings_gpio_entry)
print access["gpio_light1"].Get()