簡體   English   中英

如何使用Tkinter高效地編寫代碼以更新腳本中的許多變量?

[英]How to efficiently code for updating many variables in a script using Tkinter?

我正在設計一個Tkinter接口,使其與我的數據記錄腳本兼容。 兩者仍然是WIP,但接近合並。 該腳本用於Raspberry Pi,以使用不同的傳感器定期進行測量。 在這種情況下,植物。

我有各種Entry小部件來訪問我的變量(輸入通道,測量間隔和每個平均值的測量值),因此我可以更改它們而無需重新編程腳本本身。

3個條目窗口小部件與文本變量關聯: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循環來解決。

有誰知道一種更有效或更輕松的方法來實現我的目標?

我建議您為每個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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM