Форум сайта python.su
С целью изучения Tkinter пытаюсь написать приложение в котором находятся кнопки Добавить и Удалить, которые соответственно добавляют / удаляют, в моем случае строку с виджетом (лейбл). С добавлением кое что получилось, не знаю может можно как то по оптимальнее, а вот с удалением строки возникают проблеммы…
from tkinter import *
main = Tk()
def add_button(event):
position_in_list = button_list.index(event.widget)+1
button_list.insert(position_in_list,Button(main,text='Добавить...'))
button_list[position_in_list].bind('<ButtonRelease>',add_button)
button_del.insert(position_in_list,Button(main,text='Удалить...'))
button_del[position_in_list].bind('<ButtonRelease>',del_button)
add_obj(position_in_list)
draw()
def del_button(event):
position_in_list = button_del.index(event.widget)
del button_list[position_in_list]
del button_del[position_in_list]
del obj_list[position_in_list]
button_list[position_in_list].destroy
button_del[position_in_list].destroy
obj_list[position_in_list].destroy
draw()
def draw():
for i in range(len(button_list)):
button_list[i].grid(row=i,column=1)
button_del[i].grid(row=i,column=2)
obj_list[i].grid(row=i,column=0)
def add_obj(position_in_list):
obj_list.insert(position_in_list,Label(main,text='....'+\
str(position_in_list)+'....'))
button_list = [Button(main,text='Добавить...')]
button_list[0].bind('<ButtonRelease>',add_button)
button_list[0].grid(row=0,column=1)
button_del = [Button(main,text='Удалить...')]
button_del[0].bind('<ButtonRelease>',del_button)
button_del[0].grid(row=0,column=2)
obj_list = [Label(main,text='я тут местный...')]
obj_list[0].grid(row=0,column=0)
main.mainloop()
Офлайн
Было бы неплохо уточнить, что тебе именно не нравится.
Я заметил, что при удалении цифры наезжают на “я тут местный” (ведь она - часть списка!). Это решаем так: надпись делаем отдельной меткой
label = Label(main, text='Я тут местный')
label.grid(row=0, column=0)
Отредактировано (Апрель 27, 2011 15:22:49)
Офлайн
:) Разобрался аж самому смешно
def del_button(event):
position_in_list = button_del.index(event.widget)
obj_list[position_in_list].destroy() # забыл поставить скобки после destroy
button_list[position_in_list].destroy() # и поменял местами
button_del[position_in_list].destroy() # сначала уничтожаю виджет
# а потом удаляю его из списка
del button_list[position_in_list]
del button_del[position_in_list]
del obj_list[position_in_list]
Офлайн