在tcl/tk子窗口中,我可以';t为“我的输入”窗口小部件设置默认值
我在tcl/tk领域是一个完全的初学者,但我一直试图自己研究这个,结果总是空着 我正在扩展一个tcl/tk应用程序,它允许我添加代码来生成一个子窗口,并在其中执行我需要的操作。问题是,当我生成该窗口并尝试为我的条目小部件设置默认值时,它总是显示为空 此后,我创建了一个超简单的演示应用程序来复制此功能:在tcl/tk子窗口中,我可以';t为“我的输入”窗口小部件设置默认值,tcl,tk,Tcl,Tk,我在tcl/tk领域是一个完全的初学者,但我一直试图自己研究这个,结果总是空着 我正在扩展一个tcl/tk应用程序,它允许我添加代码来生成一个子窗口,并在其中执行我需要的操作。问题是,当我生成该窗口并尝试为我的条目小部件设置默认值时,它总是显示为空 此后,我创建了一个超简单的演示应用程序来复制此功能: #!/usr/local/bin/wish set myvar1 "initial value 1" entry .entry1 -textvariable myvar1 button .sp
#!/usr/local/bin/wish
set myvar1 "initial value 1"
entry .entry1 -textvariable myvar1
button .spawnchild -text "Spawn Child" -command "spawn_click"
pack .entry1 .spawnchild
proc spawn_click {} {
set myvar2 "initial value 2"
toplevel .lvl2
entry .lvl2.entry2 -textvariable myvar2
entry .lvl2.entry3 -textvariable myvar1
pack .lvl2.entry2 .lvl2.entry3
}
如您所见,第一个窗口包含一个条目小部件,该小部件具有默认值“initial value 1”,并且正确显示。当我单击“生成子对象”按钮时,子窗口被创建。如您所见,它包含两个堆叠的条目小部件。每一个都有一个默认值,顶部的一个使用在其自身范围内创建的默认值,底部的条目使用主程序范围内的默认值
问题是顶部的输入字段由于某种原因没有显示它的默认值,而底部的输入字段却显示得很好
有谁能解释一下这种行为,以及如何让top entry小部件正确显示其默认值
编辑
感谢Andrew和schlenk,这似乎是RTFM的一个案例:)我测试了您的全球建议,它按照承诺工作。谢谢你帮我澄清 阅读该选项的文档。变量名必须是全局(或完全限定的命名空间)变量名,但myvar2变量是局部变量。因此,在进程中设置的变量与textvariable开关使用的变量不同 解决您的问题的一个简单方法是编写如下过程:
proc spawn_click {} {
global myvar2
set myvar2 "initial value 2"
toplevel .lvl2
entry .lvl2.entry2 -textvariable myvar2
entry .lvl2.entry3 -textvariable myvar1
pack .lvl2.entry2 .lvl2.entry3
}
通过显式地将myvar2声明为全局范围,您将在-textvariable绑定中使用相同的变量。
myvar2
需要在全局级别定义。定义spawn\u单击,如下所示:
proc spawn_click {} {
global myvar2; # myvar2 is a global variable
set myvar2 "initial value 2"
toplevel .lvl2
entry .lvl2.entry2 -textvariable myvar2
entry .lvl2.entry3 -textvariable myvar1
pack .lvl2.entry2 .lvl2.entry3
}
你应该是个好人
只需注意:显示了如何在Itcl/Itk命名空间或类中实现它。