2

我在 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 ...
}
4

3 回答 3

1

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

clipboard clear
clipboard append $text

尴尬的是设置绑定并显示选择已经发生。最简单的就是做这样的蹩脚的事情(绑定到鼠标点击):

bind .lbl <1> {
    clipboard clear
    clipboard append [%W cget -text]
    bell
}

好吧,这绝对是蹩脚的;你可以做得更好!您不会得到 Windows 自己的内置标签通常支持的突出显示样式(您可以在其中拖出选择并只需按Ctrl+ C),因为这需要绘制突出显示的能力,而 Tk 的标签小部件根本不有。(您可以使用条目来破解某些内容,但它们不能执行多行文本,或者您可以使用文本小部件,但是您必须对绑定进行大量工作以使其按您想要的方式运行。)

于 2012-06-10T11:54:33.193 回答
1

您不能不从其他一些小部件中获取大量绑定代码并将其应用于您的标签。如果你需要这个,你最好使用一个入口小部件,让它看起来像一个标签。就像是:

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

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

于 2012-06-10T08:21:44.967 回答
0

我通过使用只读条目解决了它,我将标签的创建替换为:

set lbl2 [entry .prop_menu.main_frame.val_$n -relief flat]
$lbl2 insert 0 $t
$lbl2 configure -state readonly

并且能够创建类似于标签但可选择的条目。

于 2012-06-10T12:13:57.130 回答