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

时间:2017-11-02 07:46:56

标签: tcl 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'?

1 个答案:

答案 0 :(得分:2)

您想要SetTintList

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

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

ETA:使用条目

中的已处理内容更新标签

某些小部件通过虚拟事件发出更改信号(例如.ent get生成listbox事件)。 <<ListboxSelect>>窗口小部件没有。要为entry窗口小部件设置更新触发器,您可以:

  1. entry事件绑定到条目窗口小部件:<Return>。这使 Enter 键触发更新。 bind .ent <Return> +mycallback可以省略,因为此事件没有标准操作。
  2. +事件绑定到<Key>类*:Entry:任何键都会触发更新,包括编辑键。请注意,如果事件绑定到窗口小部件,则会在键击之前触发,以编辑条目的内容。如果您将其绑定到bind Entry <Key> +mycallback但省略Entry,则回调将运行而不是编辑条目的常规操作。
  3. 为变量添加观察跟踪:+
  4. 劫持验证机制:trace add variable tt write {apply {args mycallback}}
  5. .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中。如果您使用验证机制,请阅读文档,以便了解它是如何工作的(您应该始终这样做,但在这种情况下以混乱的方式弄错它很容易)。

    文档: applybindentrytrace

    *)即X Window类,而不是OOP类。