Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 26, 2011 18:35:10

sligel
От:
Зарегистрирован: 2010-12-15
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter кнопки Добавить - Удалить

С целью изучения 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()



Офлайн

#2 Апрель 27, 2011 15:21:38

Voroshek
От:
Зарегистрирован: 2011-03-11
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter кнопки Добавить - Удалить

Было бы неплохо уточнить, что тебе именно не нравится.
Я заметил, что при удалении цифры наезжают на “я тут местный” (ведь она - часть списка!). Это решаем так: надпись делаем отдельной меткой

label = Label(main, text='Я тут местный')
label.grid(row=0, column=0)
obj_list помещаем ниже grid(row=1, column=0), и в def draw() поправляем его соответственно: row=i+1.
Вроде всё.



python3 openSUSE-43Leap

Отредактировано (Апрель 27, 2011 15:22:49)

Офлайн

#3 Апрель 27, 2011 23:11:47

sligel
От:
Зарегистрирован: 2010-12-15
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter кнопки Добавить - Удалить

:) Разобрался аж самому смешно

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]
а так получалось что виджет рисуется на виджете( это и был как раз эффект когда цифра наезжала на ‘я тут местный ’),
и после нажатия кнопки удалить, удаляет виджеты только из списка …



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version