Что такое хороший способ динамического отображения различного контента (в Tcl / Tk)? - PullRequest
4 голосов
/ 03 сентября 2010

У меня есть набор radiobuttons (скажем, с вариантами 1 и 2), и мне нужно показать какой-нибудь виджет, основанный на выборе пользователя.Например, если они выбрали 1, я бы показал им labelframe с несколькими radiobuttons;тогда как, если бы они выбрали 2, я бы показал им labelframe с некоторыми buttons.В любом случае результирующее содержимое будет отображаться в одной и той же области окна.

Какой хороший способ переключения между несколькими отображениями виджетов выглядит следующим образом?1011 * заставляет меня думать, что я должен использовать panedwindow и frames, но я не совсем понимаю, как бы я переключался между различным контентом.

Ответы [ 2 ]

3 голосов
/ 04 сентября 2010

При использовании panedwindow вы сможете переключаться между панелями содержимого, удаляя фрейм и добавляя новый для его замены.См. эту страницу руководства для описания команд forget и add / insert для ttk :: panedwindow.

Пример кода:

package require Ttk

# Create a panedwindow
ttk::frame .f
ttk::panedwindow .f.pane -orient vertical

# Create three panes
ttk::frame .f.pane.one -height 50 -width 50
ttk::label .f.pane.one.l -text "Number one"
pack .f.pane.one.l

ttk::frame .f.pane.two -height 50 -width 50
ttk::label .f.pane.two.l -text "Number two"
pack .f.pane.two.l

ttk::frame .f.pane.three -height 50 -width 50
ttk::label .f.pane.three.l -text "Number three"
pack .f.pane.three.l

# Add frames one and two to the panedwindow
.f.pane add .f.pane.one
.f.pane add .f.pane.two

pack .f.pane -expand 1 -fill both
pack .f -expand 1 -fill both

# Replace pane one with pane three
.f.pane insert 1 .f.pane.three
.f.pane forget 2 

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

1 голос
/ 04 сентября 2010

Действительно простой способ - использовать один кадр для каждого набора данных. Используйте grid, чтобы разместить их все в одной строке и столбце. Тогда все, что вам нужно сделать, это поднять рамку, и это дети до вершины порядка размещения.

Другая техника начинается с того же, но вместо использования рейза, выполните grid remove с тем, который отображается в данный момент, а затем grid с тем, который будет показан. С grid remove, grid запоминает все настройки, чтобы вам не приходилось указывать все параметры снова при следующем появлении.

...