如何使 tkinter 文本小部件不可选择?

Ian*_*kel 2 python tkinter

我想让我的 tkinterText只是输出而不是输入。通过一些研究,我发现它text.config(state="disabled")会禁用用户输入,但它仍然允许选择我不想要的文本。

如何使我的Text小部件不可选择且不可写入?

Bry*_*ley 6

最简单的方法是替换支持选择的默认文本绑定,以便它们不执行任何操作。有几种方法可以做到这一点:使用绑定标签,您可以删除所有默认绑定,或者您可以仅删除默认绑定子集的绑定。

删除所有默认绑定

小部件上的所有绑定(包括默认绑定)都与绑定标签(也称为“bindtags”)相关联。文本小部件的绑定标签是“Text”,文本小部件的所有默认绑定都与此标签关联。如果删除该绑定标记,则会删除所有特定于文本的绑定。

任何小部件的默认绑定标记都是小部件的字符串表示形式、内部小部件类(在本例中为“Text”)、顶层窗口的内部名称(在本例中为 root)以及特殊窗口的元组。标记“全部”。

在下面的示例中,我们更改绑定标签,以便不包含“文本”,从而有效地删除文本小部件上的所有默认绑定:

import tkinter as tk

root = tk.Tk()
text = tk.Text(root)
text.bindtags((str(text), str(root), "all"))
Run Code Online (Sandbox Code Playgroud)

删除特定绑定

如果您希望保留某些默认绑定,则可以仅替换您不需要的绑定。您可以通过创建自己的绑定并让这些绑定返回字符串“break”来实现此目的。这个特殊的返回值告诉 tkinter 停止进一步处理该事件。

例如,要防止双击选择光标下的单词,您可以这样做:

text.bind("<Double-1>", lambda event: "break")
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是您必须弄清楚与选择机制相关的所有绑定是什么。另一方面,它使您可以完全控制每个按键或按钮的操作。