Форум сайта python.su
Есть группа радиокнопок. При переключении требуется, чтобы одни поля и метки скрывавись, а другие отображались. Можно ли как-нибудь это сделать в Тkinter?
Про свойство state=DISABLED | NORMAL знаю. Но это не то: элементы отключаются, а не скрываются.
И заодно как это делается в PyQT?
Офлайн
И заодно как это делается в PyQT?
Офлайн
Tkinter - можно и даже нужно. Есть три основных варианта:
Вариант первый:
1. Создаем рамку и пакуем туда все кнопки.
2. Рамку размещаем любым методом.
3. Используем метод имя_рамки.метод_упаковки_forget() |Например frm.place_forget()| чтобы скрыть кнопки.
4. Чтобы кнопки опять появились - заново размещаем методом, который использовали до скрытия.
5. На место исчезнувшей рамки можно свободно разместить новую с новым набором кнопок и потом их чередовать и чередовать и чередовать и чередовать…
Вариант второй:
Есть интересненькая особенность метода grid, которая называется grid_remove(). Специфика, по сравнению с первым вариантом заключается в том, что метод удаляет виджет из-под управления упаковщика, но при этом сохраняет информацию об упаковке.
Вариант третий (для извращенцев):
1. Создать словарь, где каждому ключу будет соответствовать список, состоящий из ссылок на объекты кнопок, размещений этих кнопок и с функциями, которые они вызывают.
2. Скрывать и показывать объекты массово, исходя из активности списков в отдельном цикле.
Если нужен пример - пишите…
P.S. Надеюсь, что Вы не выберете 3 вариант :)
Отредактировано 4kpt (Янв. 21, 2013 17:50:50)
Офлайн
С методом grid_remove() получилось примерно так:
from tkinter import * import datetime def func(): if var_what.get() == 0: l3.grid_remove() l3_in.grid_remove() l1.grid(row=4,column=0) e1_in.grid(row=5,column=0) elif var_what.get() == 1: today = datetime.date.today() l3_in.config(text=today) l1.grid_remove() e1_in.grid_remove() l3.grid(row=4,column=0) l3_in.grid(row=5,column=0) def func1(): pass win = Tk() var_what = IntVar() var_what.set(0) what_days1 = Radiobutton(text="One",variable=var_what,value=0,command=func) what_days2 = Radiobutton(text="Two",variable=var_what,value=1,command=func) l1 = Label(text='Дата1:') e1_in = Entry(width=10) l2 = Label(text='Дата2:') e2_in = Entry(width=10) l3 = Label(text='Сегодня:') l3_in = Label(width=10,bg="lightgray") l_out = Label(width=10,bg="lightgreen") but = Button(text="Вычислить",command=func1) what_days1.grid(row=0,column=0,columnspan=2) what_days2.grid(row=1,column=0,columnspan=2) Frame(bg='darkgray',width=200,height=5).grid(row=3,column=0,columnspan=2,pady=7) l1.grid(row=4,column=0) e1_in.grid(row=5,column=0) l2.grid(row=4,column=1) e2_in.grid(row=5,column=1) but.grid(row=6,column=0,pady=15) l_out.grid(row=6,column=1) win.mainloop()
Отредактировано plustilino (Фев. 8, 2013 08:19:58)
Офлайн