Переменная подстановка в ткинтер
Почему этот код не работает
objects=[
('o','label', 0, 1),
('g','label', 0, 2),
('e','label', 0, 3),
('r','label', 1, 0),
('w','label', 2, 0),
('x','label', 3, 0),
]
for thing in objects:
name = thing[0]
type = thing[1]
name = tk.type()
Я пытаюсь использовать список для определения моих виджетов tkinter в попытке сохранить аккуратный код. Первый элемент - это имя, а затем тип. Я продолжаю получать эту ошибку.
module has no attribute type
Я знаю, что я делаю неправильно, я просто не знаю, как это исправить. Как я могу использовать значения, которые хранятся в переменной, чтобы создать виджет?
Я хочу name = tk.type()
быть интерпретированным как o = tk.label()
Спасибо за любую помощь.
3 ответа
Это не работает, потому что второй столбец в вашем списке содержит строки, а не классы. Может быть, вы должны сохранить реальный класс в вашем списке объектов:
import Tkinter as tk
...
objects=[
('o',tk.Label, 0, 1),
('g',tk.Label, 0, 2),
('e',tk.Label, 0, 3),
('r',tk.Label, 1, 0),
('w',tk.Label, 2, 0),
('x',tk.Label, 3, 0),
]
Использование getattr()
,
name = getattr(tk, type)
Сейчас name
это функция, так что вы можете вызвать ее, используя синтаксис функции (name()
)
Виджет ярлыка Tkinter пишется с большой буквы "L", поэтому вам нужно
objects=[
('o','Label', 0, 1),
('g','Label', 0, 2),
('e','Label', 0, 3),
('r','Label', 1, 0),
('w','Label', 2, 0),
('x','Label', 3, 0),
]