我正在尝试从ttk:entry
获取值。我有以下代码。
variable DefaultRoot
ttk::label $wi.custcfg.dlabel -text "Default Root:"
ttk::entry $wi.custcfg.daddr -width 10 -textvariable ::DefaultRoot -validate focusout -validatecommand { puts $::DefaultRoot; return 1}
puts $DefaultRoot
但我在最后一次投注中遇到错误
答案 0 :(得分:2)
在您将变量设置为某个值之前,该变量不会存在。仅仅将其声明为变量(例如:variable DefaultRoot
)并不会使其成为现实。
使用您发布的代码,您在创建条目小部件后大约执行最后puts
一微秒。用户无法在puts
发生之前输入任何文本。因此,该变量尚未存在且puts
将失败。
一个简单的解决方案是确保在调用puts
之前设置变量,但这只意味着puts
将打印默认值。
换句话说,这将打印"这是默认的":
variable DefaultRoot
set DefaultRoot "this is the default"
ttk::entry $wi.custcfg.daddr -textvariable ::DefaultRoot
puts $DefaultRoot
但是,要回答您的具体问题,您可以在创建变量后的任何地方使用$::DefaultRoot
。
例如,您可以创建一个按钮来打印如下值:
proc print_variable {} {
puts "DefaultRoot=$::DefaultRoot"
}
ttk::button $wi.custcfg.button -text foo -command print_variable
答案 1 :(得分:1)
您可以通过
随处访问变量global DefaultRoot
puts $DefaultRoot
或
puts $::DefaultRoot