Найти - Пользователи
Полная версия: Tkinter. Создание контролов в цикле.
Начало » Python для новичков » Tkinter. Создание контролов в цикле.
1 2
XoFfiCEr
Очень удобная фича создания сразу множества контролов (элементов управления) в цикле:
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 как оказалось разный. Иногда это намного удобнее чем другие способы например компоновка по сетке и т. д.
Кто нибудь знает как обратиться к отдельной кнопке за пределами цикла, отконфигурять например если надо.
XoFfiCEr
А все понял
    t=event.widget
    t.config(text='')
Хорошо, а как узнать какая кнопка была нажата?
Shaman
Список же.
4kpt_IV
Если безымянные кнопки, то никак. Да и зачем Хотя можно создать список и хранить там id объекта, а потом в обработчике события проверить.
XoFfiCEr
4kpt_IV
Если безымянные кнопки, то никак. Да и зачем Хотя можно создать список и хранить там id объекта, а потом в обработчике события проверить.
Спасибо.
Как извлечь text с кнопок если он есть?
4kpt_IV
XoFfiCEr
Вы сами почти догадались

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

Получив event.widget вы фактически получили ссылку на виджет. Вы можете не только менять его параметры но и узнать их, если нужно.
XoFfiCEr
Может еще подскажете как удалить такие вот безымянные кнопки?
4kpt_IV
В смысле “удалить”? Вы имеете ввиду, что после нажатия кнопки должны исчезать или???
XoFfiCEr
4kpt_IV
В смысле “удалить”? Вы имеете ввиду, что после нажатия кнопки должны исчезать или???
destroy нужен, но как написать не знаю
устал, туплю.
4kpt_IV
Тут два варианта:
1. Упаковать все в рамку и ее удалить: метод destroy()
2. Упаковать все в рамку и ее скрыть: метод менеджер_геометрии_forget().

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