Найти - Пользователи
Полная версия: Tkinter кнопки Добавить - Удалить
Начало » GUI » Tkinter кнопки Добавить - Удалить
1
sligel
С целью изучения 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()
Voroshek
Было бы неплохо уточнить, что тебе именно не нравится.
Я заметил, что при удалении цифры наезжают на “я тут местный” (ведь она - часть списка!). Это решаем так: надпись делаем отдельной меткой
label = Label(main, text='Я тут местный')
label.grid(row=0, column=0)
obj_list помещаем ниже grid(row=1, column=0), и в def draw() поправляем его соответственно: row=i+1.
Вроде всё.
sligel
:) Разобрался аж самому смешно
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]
а так получалось что виджет рисуется на виджете( это и был как раз эффект когда цифра наезжала на ‘я тут местный ’),
и после нажатия кнопки удалить, удаляет виджеты только из списка …
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB