Как я могу дать различные имена переменных для комбинированных списков в цикле for, используя tkinter (python 3) - PullRequest
0 голосов
/ 05 октября 2019

Я новичок и работаю над программой для моего Raspberry Pi 3B + (в Python 3). Я хотел бы сделать программу для включения и выключения выводов GPIO. Я стараюсь использовать как можно меньше кода. Однако проблема в том, что в цикле for, который я сделал, комбо-боксы не получают своего собственного имени, поэтому я не могу их прочитать. Мне нравится давать им имя combo + str (nr), но python не хочет этого делать. Я также хотел бы связать действие с каждым вариантом. Кто-нибудь знает решение для этого?

Вот мой код:

#imports--------------------------------------------------
from tkinter import *
from tkinter import ttk

#variabelen and defs--------------------------------------------------

здесь я хочу разместить определения для списков. Снова как можно короче.

#window setup--------------------------------------------------
root = Tk()
root.title("Raspberry Pi - GPIO")

#labels--------------------------------------------------
clm = 0
nr = 1
for a in range (4):
    clm = clm+3
    for b in range (10):
        name = "GPIO"+str(nr)
        nr = nr+1
        naam = Label(root, text = name)
        naam.grid(column = clm, row = b)

#comboboxes--------------------------------------------------
clm = 1
nr = 1
for a in range (4):
    clm = clm+3
    for b in range (10):
        nr = nr+1
        optie = ttk.Combobox(root, state="readonly", width = 5, values = ["ON","OFF"])
        optie.current(1)
        optie.grid(column = clm, row = b)

#white space--------------------------------------------------
clm = 2
for a in range (3):
    clm = clm+3
    for b in range (10):
        naam = Label(root, text = "          ")
        naam.grid(column = clm, row = b)

#window + mainloop--------------------------------------------------
root.resizable(0,0)
root.mainloop()

извините, если мой английский не очень хорош, обычно я говорю на голландском. заранее спасибо.

1 Ответ

0 голосов
/ 05 октября 2019

Вам нужны ссылки на объекты, которые вы создали, и это не обязательно должны быть имена. Вы можете использовать контейнеры типа list или dict для их хранения.

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("Raspberry Pi - GPIO")
all_combos = {} #create an empty dictionary

for col in range(4):
    all_combos[col] = [] #create a list base on column index
    for row in range(1,11):
        Label(root,text=f"GPIO{col*10+row}").grid(row=row,column=col*2)
        c = ttk.Combobox(root, state="readonly", width = 5, values = ["ON","OFF"])
        c.current(1)
        c.grid(row=row,column=col*2+1)
        all_combos[col].append(c) #add each combobox to the column

root.resizable(0,0)
root.mainloop()

Теперь вы получаете диктонар all_combos, в котором хранятся все ваши выпадающие списки. Вы можете получить доступ к любому конкретному комбинированному списку, передавая индексы, например,

print (all_combos[0][5].get())

#OFF
...