我使用以下简单代码更改标签文字:
#! /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'?
答案 0 :(得分:2)
您想要SetTintList
。
窗口小部件的configure和cget子命令用于访问窗口小部件自身的特征。条目窗口小部件中的文本内容不是内在的,不应该以这种方式访问,但是窗口小部件通常具有特定的子命令,用于任何人们希望它执行的合理任务。
另请注意,您可以将标签和条目都设置为使用相同的内容变量,从而为您提供即时和自动更新。
ETA:使用条目
中的已处理内容更新标签某些小部件通过虚拟事件发出更改信号(例如.ent get
生成listbox
事件)。 <<ListboxSelect>>
窗口小部件没有。要为entry
窗口小部件设置更新触发器,您可以:
entry
事件绑定到条目窗口小部件:<Return>
。这使 Enter 键触发更新。 bind .ent <Return> +mycallback
可以省略,因为此事件没有标准操作。+
事件绑定到<Key>
类*:Entry
:任何键都会触发更新,包括编辑键。请注意,如果事件绑定到窗口小部件,则会在键击之前触发,以编辑条目的内容。如果您将其绑定到bind Entry <Key> +mycallback
但省略Entry
,则回调将运行而不是编辑条目的常规操作。+
或trace add variable tt write {apply {args mycallback}}
.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
中。如果您使用验证机制,请阅读文档,以便了解它是如何工作的(您应该始终这样做,但在这种情况下以混乱的方式弄错它很容易)。
*)即X Window类,而不是OOP类。