LINUX.ORG.RU

[Tkinter] как создавать виджеты в цикле ?

 


0

0

Нужно создавать виджеты в цикле и потом менять их параметры. Собствна в чем ошибка след. кода ?

class lbl():
def __init__(self, n):
self.l = Label(root,
text = '1',
relief="groove",
borderwidth=1,
font=("Courier", 12, "bold"),
justify=LEFT,
width=10,
padx=10,
pady=10,
takefocus=False,
).grid(column=0,row=n)

def draw(x):
for n in range(10):
t=lbl(n)
t.l["bg"] = 'green'
print t.l

button = Button(root, text="Хеллоу")
button.grid(column=2,row=0)
button.bind("<Button-1>", draw)

Мда, Питон совершенно не годится для копи-пасты. В общем суть в том, что надо вынести вызов метода grid в конструкторе на отдельную строку: self.l.grid(column=0,row=n). Почему так, честно говоря не знаю.

Hjorn
()

Извиняюсь, по моему всё не правильно от объявления класса и хардкора параметров, до куда ты собственно grid прилепил?

maxim2
()
Ответ на: комментарий от Hjorn

А хотя нет, знаю - ты же присваиваешь переменной l результат grid(), а что он возвращает - хз. Логично было бы, если бы он возвращал тот объект, который компонуется. Но в Питоне это не так судя по всему.

Hjorn
()

root=Tkinter.Tk()

labels = []
for n in range(10):
....Lab=Tkinter.Label(root, text = '1',
........relief="groove",borderwidth=1,font=("Courier", 12, "bold"),
............justify=LEFT,width=10,padx=10,pady=10,
............takefocus=False,bg="white")
....Lab.grid(row=n, column=0)
....labels.append(Lab)





for label in labels:
....label["bg"] = 'green'

maxim2
()
Ответ на: комментарий от maxim2

Ох спасибочки!!! С классами учусь пока...

ananimys
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.