如何使用Tkinter有效地编写代码来更新脚本中的许多变量?

时间:2015-08-23 14:18:41

标签: python list tkinter

我正在设计一个与我的数据记录脚本兼容的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循环解决。

有没有人知道更有效或更简单的方法来实现我的目标?

1 个答案:

答案 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()