访问 Tk 中输入字段值的不同方法

Different methods to access value of an entry field in Tk

我正在使用以下简单代码来更改标签文本:

#! /usr/bin/wish8.6

label .a_lab -text "Enter text: "
entry .ent -textvariable tt
button .a_button -text "Change" -command changer

pack .a_lab -fill both -expand 1
pack .ent -fill both -expand 1
pack .a_button -fill both -expand 1

proc changer {} {
    .a_lab config -text $::tt ;# How can I access 'tt' using pathname '.ent'? 
    }

wm geometry . 300x200+300+300

除了 '$::tt' 之外,还有其他方法可以访问 'tt' 的值吗?

你想要.ent get.

小部件的 configure 和 cget 子命令用于访问小部件自身的特征。条目小部件中的文本内容不是固有的,不应该以这种方式访问​​,但是小部件通常有一个特定的子命令来执行人们希望它执行的任何合理任务。

另请注意,您可以将标签和条目设置为使用相同的内容变量,这样可以即时自动更新。

预计到达时间: 使用条目中已处理的内容更新标签

一些小部件通过虚拟事件发出变化信号(例如,listbox 生成一个 <<ListboxSelect>> 事件)。 entry 小部件没有。要为 entry 小部件设置更新触发器,您可以:

  1. <Return> 事件绑定到条目小部件:bind .ent <Return> +mycallback。这让 Enter 键触发更新。 + 可以省略,因为此事件没有标准操作。
  2. <Key>事件绑定到Entry class*:bind Entry <Key> +mycallback:任何键都会触发更新,包括编辑键。请注意,如果事件绑定到小部件,它会在 击键编辑条目内容之前触发。如果将其绑定到 Entry 但省略 +,回调将是 运行 而不是 编辑条目的通常操作。
  3. 为变量添加观察轨迹:trace add variable tt write {apply {args mycallback}},或
  4. 劫持验证机制:.ent config -validate key -validatecommand {.a_lab config -text [string toupper %P];expr 1}

mycallback回调可以是

proc mycallback {} {
    .a_lab config -text [string toupper [.ent get]]
}

proc mycallback {} {
    .a_lab config -text [string toupper $::tt]
}

如果将回调的参数列表设置为args,则跟踪时不需要将其包裹在apply中。如果您使用验证机制,请阅读文档以了解它是如何工作的(您应该始终这样做,但在这种情况下很容易以令人困惑的方式弄错)。

文档: apply, bind, entry, trace


*) 即 X Window class,而不是 OOP class.