Hide/show 使用 [包信息] 的带有菜单复选按钮的小部件
Hide/show a widget with a menu checkbutton using [pack info]
我想保存要从菜单复选按钮中隐藏的框架的信息。我收到以下错误:
extra option "-in .mainframe -anchor center -expand 0 -fill x -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top" (option with no value?)
while executing
"pack $w $winfo"
(procedure "cmd_toggle" line 9)
invoked from within
"cmd_toggle .mainframe.l1"
(menu invoke)
我是不是用错了包信息?
package require Tk
package require Ttk
# Menu
menu .menu
menu .menu.m1
.menu add cascade -menu .menu.m1 -label "menu1"
. config -menu .menu
# Frame + label
frame .mainframe
label .mainframe.l1 -text "blabla" -width 22
.menu.m1 add checkbutton -label "Toggle" -variable state -command [list cmd_toggle .mainframe.l1]
pack .mainframe.l1 -fill x
pack .mainframe -side left
set winfo "" ; # save of the widget pack info
proc cmd_toggle { w } {
global state
global winfo
if {$state} {
set winfo [pack info $w]
pack forget $w
} else {
pack $w $winfo
}
}
感谢您的宝贵时间。
达米恩
不,您没有使用错误的方式 pack info
,而是 pack
本身。 pack $w
需要一个论点列表,而您提出了一个它不知道的论点。
她的解决方案是,在 {*}
运算符的帮助下将 $winfo
分解为参数列表。将行更改为此
pack $w {*}$winfo
给出了想要的结果。
如果您不使用 checkbutton(需要变量),您可以使用 winfo ismapped $w
来避免使用全局 state
变量。
顺便说一句:状态按钮显示出相反的行为。您应该在开始时将其设置为 true 并反转 if 条件。然后,如果已设置,则会显示标签。确实如此,因为在变量值改变后调用命令,所以可以改变命令中的值。
我想保存要从菜单复选按钮中隐藏的框架的信息。我收到以下错误:
extra option "-in .mainframe -anchor center -expand 0 -fill x -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top" (option with no value?) while executing "pack $w $winfo" (procedure "cmd_toggle" line 9) invoked from within "cmd_toggle .mainframe.l1" (menu invoke)
我是不是用错了包信息?
package require Tk
package require Ttk
# Menu
menu .menu
menu .menu.m1
.menu add cascade -menu .menu.m1 -label "menu1"
. config -menu .menu
# Frame + label
frame .mainframe
label .mainframe.l1 -text "blabla" -width 22
.menu.m1 add checkbutton -label "Toggle" -variable state -command [list cmd_toggle .mainframe.l1]
pack .mainframe.l1 -fill x
pack .mainframe -side left
set winfo "" ; # save of the widget pack info
proc cmd_toggle { w } {
global state
global winfo
if {$state} {
set winfo [pack info $w]
pack forget $w
} else {
pack $w $winfo
}
}
感谢您的宝贵时间。
达米恩
不,您没有使用错误的方式 pack info
,而是 pack
本身。 pack $w
需要一个论点列表,而您提出了一个它不知道的论点。
她的解决方案是,在 {*}
运算符的帮助下将 $winfo
分解为参数列表。将行更改为此
pack $w {*}$winfo
给出了想要的结果。
如果您不使用 checkbutton(需要变量),您可以使用 winfo ismapped $w
来避免使用全局 state
变量。
顺便说一句:状态按钮显示出相反的行为。您应该在开始时将其设置为 true 并反转 if 条件。然后,如果已设置,则会显示标签。确实如此,因为在变量值改变后调用命令,所以可以改变命令中的值。