如何从ttk:entry获取值

时间:2017-08-17 05:53:25

标签: tcl tk

我正在尝试从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

但我在最后一次投注中遇到错误

2 个答案:

答案 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