我想从菜单检查按钮中保存要隐藏的帧的信息。我收到以下错误:
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
}
}
感谢您的时间。
达明
答案 0 :(得分:3)
不,你没有以错误的方式使用pack info
,而是pack
本身。 pack $w
需要一个参数列表,并且您正在呈现一个它不知道的单个参数。
她的解决方案是在$winfo
运算符的帮助下将{*}
分解为参数列表。将行更改为此
pack $w {*}$winfo
给出了期望的结果。
如果您不使用 checkbutton (需要变量),则可以使用winfo ismapped $w
来避免全局state
变量。
BTW:状态按钮显示反转行为。您应该在开头将其设置为 true 并反转if条件。然后,如果设置,则显示标签。这是正确的,因为在变量值之后,该命令被称为,因此可以更改命令中的值。