Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在tcl/tk子窗口中,我可以';t为“我的输入”窗口小部件设置默认值_Tcl_Tk - Fatal编程技术网

在tcl/tk子窗口中,我可以';t为“我的输入”窗口小部件设置默认值

在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

我在tcl/tk领域是一个完全的初学者,但我一直试图自己研究这个,结果总是空着

我正在扩展一个tcl/tk应用程序,它允许我添加代码来生成一个子窗口,并在其中执行我需要的操作。问题是,当我生成该窗口并尝试为我的条目小部件设置默认值时,它总是显示为空

此后,我创建了一个超简单的演示应用程序来复制此功能:

#!/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命名空间或类中实现它。