创建一个类似于标签的Tk Tcl条目
我想创建标签,以便可以选择其中的文本进行复制/粘贴。为此,我尝试使用只读条目。但我似乎无法初始化其中的文本值。标签在循环内生成,标签数量及其内容未知。产生标签的代码为:创建一个类似于标签的Tk Tcl条目,tcl,tk,Tcl,Tk,我想创建标签,以便可以选择其中的文本进行复制/粘贴。为此,我尝试使用只读条目。但我似乎无法初始化其中的文本值。标签在循环内生成,标签数量及其内容未知。产生标签的代码为: proc test_labels {} { toplevel .labels # Main Frame frame .labels.main_frame -relief "groove" -bd 2 pack .labels.main_frame set r 1
proc test_labels {} {
toplevel .labels
# Main Frame
frame .labels.main_frame -relief "groove" -bd 2
pack .labels.main_frame
set r 1
foreach t [list banana apple grapes orange lemon peach] {
set lbl [label .labels.main_frame.lbl_$r -text "fruit $r:"]
set lbl2 [label .labels.main_frame.val_$r -text $t]
grid $lbl -row $r -column 1 -sticky nse
grid $lbl2 -row $r -column 2 -sticky nsw
incr r
}
set ok_btn [button .labels.main_frame.ok_b -text "OK" -command {prop_menu_ok_button}]
grid $ok_btn -row [expr $r+2] -column 1 -columnspan 2 -sticky nsew
grab release .
grab set .labels
center_the_toplevel .labels
bind .labels <Key-Return> {test_labels_ok_button}
}
但这只会产生空行:
如何将默认值放入条目小部件
与问题相关这些行几乎肯定不是你想要的!(如果您使用的是
eval
,您应该始终询问它是否真的有必要;从8.5开始,可能的答案是“没有必要”。)
除了使用eval
,关键问题是-textvariable
选项采用变量名称。让我们通过使用数组来保存值来解决这个问题:
set text_val($r) $t
set lbl2 [entry .labels.main_frame.val_$r -relief flat -state readonly \
-textvariable text_val($r)]
另外,请注意,text\u val
数组需要是全局数组(或者在命名空间中,如果将名称赋予-textvariable
选项时完全限定名称)。这是因为它是从任何程序范围之外的地方访问的
当然,事实证明,如果我们保持值不变,那么我们可以完全避免使用变量,只需手动插入值
set lbl2 [entry .labels.main_frame.val_$r -relief flat]
$lbl2 insert 0 $t
$lbl2 configure -state readonly
如果您从不更改该值,则可以正常工作。插入
命令不起作用。我已经尝试过了,但它只是将条目保留为空。@Ilymelamed:它可能不起作用,因为您将状态设置为只读
。将状态保持为正常状态,进行插入,然后将状态设置为readonly
@BryanOakley,您是正确的。多纳尔,请在回答中加上这个。
set text_val($r) $t
set lbl2 [entry .labels.main_frame.val_$r -relief flat -state readonly \
-textvariable text_val($r)]
set lbl2 [entry .labels.main_frame.val_$r -relief flat]
$lbl2 insert 0 $t
$lbl2 configure -state readonly