如何使Tk标签中的文本可选?

时间:2012-06-10 07:35:28

标签: label tcl tk

我在Tcl Tk中创建标签,但是他们的文字不可选(用于复制粘贴)。我如何选择?

我使用以下标签来创建标签:

set n 0
foreach t $list_of_labels {
    incrr n
    set lbl2 [label .prop_menu.main_frame.val_$n    -text $t]
    grid $lbl2 ...
}

3 个答案:

答案 0 :(得分:1)

如果不从其他小部件中获取大量绑定代码并将其应用于您的标签,则无法做到。如果你需要这个,你最好采用一个入口小部件,使它看起来像一个标签。类似的东西:

entry .e1 -textvar t -relief flat -background [$parentWindow cget -background]

如果您不希望焦点转移到这些,请添加-takefocus 0

答案 1 :(得分:0)

如果标签中的文本可以选择 en masse ,则必须应用绑定,以便程序知道何时选择它(而不是其他东西)并且必须有一些代码将代码放入选择(或更确切地说是剪贴板)。后者实际上很容易使用clipboard命令:

clipboard clear
clipboard append $text

尴尬的一点是设置绑定,显示选择已经发生。最简单的只是做一些像这样的跛脚(绑定到鼠标点击):

bind .lbl <1> {
    clipboard clear
    clipboard append [%W cget -text]
    bell
}
好的,这绝对是蹩脚的;你可以做得更好!你不会得到的是Windows内置标签经常支持的突出显示风格(你可以拖出一个选择,只需按 Ctrl + C )需要能够绘制突出显示,而Tk的标签小部件根本没有。 (您可以使用条目来破解某些内容,但是它们不能执行多行文本,或者您可以使用文本小部件,但是您必须使用绑定执行批次工作以使其表现为你想要。)

答案 2 :(得分:0)

我通过使用只读条目解决了它,我用:

替换了标签的创建
set lbl2 [entry .prop_menu.main_frame.val_$n -relief flat]
$lbl2 insert 0 $t
$lbl2 configure -state readonly

并且能够创建像标签一样但可以选择的条目。