Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Tkinter, PyQt. Как скрыть виджет-элемент, а потом снова отобразить его? [RSS Feed]

#1 Янв. 21, 2013 11:46:49

plustilino
Зарегистрирован: 2011-08-01
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter, PyQt. Как скрыть виджет-элемент, а потом снова отобразить его?

Есть группа радиокнопок. При переключении требуется, чтобы одни поля и метки скрывавись, а другие отображались. Можно ли как-нибудь это сделать в Тkinter?

Про свойство state=DISABLED | NORMAL знаю. Но это не то: элементы отключаются, а не скрываются.

И заодно как это делается в PyQT?



Офлайн

#2 Янв. 21, 2013 11:51:12

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

Tkinter, PyQt. Как скрыть виджет-элемент, а потом снова отобразить его?

И заодно как это делается в PyQT?
Без кода не понятно что к чему, но вообще вызвать у нужного виджета hide()
Если они в чем-то вроде QGroupBox то можно только у него hide вызвать, остальные автоматом спрячуться.



Офлайн

#3 Янв. 21, 2013 17:49:57

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Tkinter, 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)

Офлайн

#4 Янв. 22, 2013 08:41:52

plustilino
Зарегистрирован: 2011-08-01
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter, PyQt. Как скрыть виджет-элемент, а потом снова отобразить его?

С методом 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)

Офлайн

  • Начало
  • » GUI
  • » Tkinter, PyQt. Как скрыть виджет-элемент, а потом снова отобразить его?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version