Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2016 19:01:32

XoFfiCEr
От:
Зарегистрирован: 2011-06-05
Сообщения: 50
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

Очень удобная фича создания сразу множества контролов (элементов управления) в цикле:

from tkinter import *
def release(event):
    print (event.widget)
if __name__ == "__main__":
    root=Tk()
    i=7
    while i>0:
        B=Button(root, text='кнопко')
        B.bind('<Button-1>', release)
        B.pack()
        i-=1
    B.config(text='большое кнопко')
    root.mainloop()
Можно создавать целые ряды Button или например Entry, название у них будет одинаковое, а вот event.widget как оказалось разный. Иногда это намного удобнее чем другие способы например компоновка по сетке и т. д.
Кто нибудь знает как обратиться к отдельной кнопке за пределами цикла, отконфигурять например если надо.



Офлайн

#2 Июль 7, 2016 19:56:36

XoFfiCEr
От:
Зарегистрирован: 2011-06-05
Сообщения: 50
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

А все понял

    t=event.widget
    t.config(text='')
Хорошо, а как узнать какая кнопка была нажата?



Офлайн

#3 Июль 7, 2016 22:11:39

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

Список же.

Офлайн

#4 Июль 8, 2016 11:28:10

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

Если безымянные кнопки, то никак. Да и зачем Хотя можно создать список и хранить там id объекта, а потом в обработчике события проверить.

Офлайн

#5 Июль 8, 2016 19:12:39

XoFfiCEr
От:
Зарегистрирован: 2011-06-05
Сообщения: 50
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

4kpt_IV
Если безымянные кнопки, то никак. Да и зачем Хотя можно создать список и хранить там id объекта, а потом в обработчике события проверить.
Спасибо.
Как извлечь text с кнопок если он есть?



Отредактировано XoFfiCEr (Июль 8, 2016 19:29:28)

Офлайн

#6 Июль 10, 2016 09:33:13

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

XoFfiCEr
Вы сами почти догадались

t=event.widget
print(t["text"])

Получив event.widget вы фактически получили ссылку на виджет. Вы можете не только менять его параметры но и узнать их, если нужно.

Офлайн

#7 Июль 12, 2016 21:29:34

XoFfiCEr
От:
Зарегистрирован: 2011-06-05
Сообщения: 50
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

Может еще подскажете как удалить такие вот безымянные кнопки?



Офлайн

#8 Июль 12, 2016 22:15:59

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

В смысле “удалить”? Вы имеете ввиду, что после нажатия кнопки должны исчезать или???

Офлайн

#9 Июль 12, 2016 23:24:09

XoFfiCEr
От:
Зарегистрирован: 2011-06-05
Сообщения: 50
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

4kpt_IV
В смысле “удалить”? Вы имеете ввиду, что после нажатия кнопки должны исчезать или???
destroy нужен, но как написать не знаю
устал, туплю.



Офлайн

#10 Июль 13, 2016 21:49:56

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Tkinter. Создание контролов в цикле.

Тут два варианта:
1. Упаковать все в рамку и ее удалить: метод destroy()
2. Упаковать все в рамку и ее скрыть: метод менеджер_геометрии_forget().

Второй случай используется, когда нужно показать какой-то результат, но все равно придется вернуться к начальному состоянию, но ради экономии не хочется создавать все кнопки заново.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version