Есть ли более короткий путь к этому с помощью списка? - PullRequest
0 голосов
/ 05 июня 2018

Интересно, есть ли более короткий способ объявить много переменных одновременно

    self.lal500 = ttk.Label(self.root, text='$500')
    self.ent500 = ttk.Entry(self.root, textvariable=self.int500, width=5, state='readonly')
    self.lal200 = ttk.Label(self.root, text='$200')
    self.ent200 = ttk.Entry(self.root, textvariable=self.int200, width=5, state='readonly')
    self.lal100 = ttk.Label(self.root, text='$100')
    self.ent100 = ttk.Entry(self.root, textvariable=self.int100, width=5, state='readonly')
    self.lal50 = ttk.Label(self.root, text='$50')
    self.ent50 = ttk.Entry(self.root, textvariable=self.int50, width=5, state='readonly')
    self.lal20 = ttk.Label(self.root, text='$20')
    self.ent20 = ttk.Entry(self.root, textvariable=self.int20, width=5, state='readonly')
    self.lal10 = ttk.Label(self.root, text='$10')
    self.ent10 = ttk.Entry(self.root, textvariable=self.int10, width=5, state='readonly')
    self.lal5 = ttk.Label(self.root, text='$5')
    self.ent5 = ttk.Entry(self.root, textvariable=self.int5, width=5, state='readonly')
    self.lal2 = ttk.Label(self.root, text='$2')
    self.ent2 = ttk.Entry(self.root, textvariable=self.int2, width=5, state='readonly')
    self.lal1 = ttk.Label(self.root, text='$1')
    self.ent1 = ttk.Entry(self.root, textvariable=self.int1, width=5, state='readonly')

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Используйте словарь для хранения ссылок на виджеты, а затем просто переберите список значений:

self.labels = {}
self.entries = {}
for value in [1, 2, 5, 10, 20, 50, 100, 200, 500]:
    self.labels[value] = entry = tk.Entry(self, width=5, state='readonly')
    self.entries[value] = label = tk.Label(self, text="$%s" % value)

Вы можете получить значение для любой записи с чем-то вроде этого: self.entries[100].get()

0 голосов
/ 05 июня 2018

Во-первых, я бы, вероятно, структурировал бы это по-другому, как диктовку, то есть что-то вроде

d = {500:
        {'lal': ttk.Label ...
        'ent': ttk.Entry ...
...
}

Затем я бы создал это с помощью понимания или цикла, что-то вроде этого:

for n in 1,2,5,10,20,50, ...:
    d[n] = {'lal': ttk.label.... text='$'+str(n),
            'ent': ttk. ... }

Не зная больше о том, что self.int500 & c.Да, трудно заполнить пробелы полностью.

Если это обычный шаблон, вы также можете выполнить итерацию по списку:

for n in [i*f for f in [1,10,100] for i in [1,2,5]]:
    ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...