14

我将如何锁定一个Text小部件,以便用户只能从中选择和复制文本,但我仍然可以将文本插入到Text函数或类似函数中?

4

3 回答 3

25

您是否尝试过简单地禁用文本小部件?

text_widget.configure(state="disabled")

在某些平台上,您还需要添加绑定<1>以将焦点赋予小部件,否则不会出现复制突出显示:

text_widget.bind("<1>", lambda event: text_widget.focus_set())

如果您禁用小部件,以编程方式插入,您只需要

  1. 将小部件的状态更改为NORMAL
  2. 插入文本,然后
  3. 将状态更改回DISABLED

只要您不在update中间调用,那么用户就无法以交互方式输入任何内容。

于 2012-05-30T14:08:52.230 回答
7

抱歉,我迟到了,但我发现此页面正在寻找与您相同的解决方案。

我发现,如果您默认“禁用”文本小部件,然后在为其提供输入的函数开始时“正常”它,并在函数结束时再次“禁用”它。

def __init__():
    self.output_box = Text(fourth_frame, width=160, height=25, background="black", foreground="white")
    self.output_box.configure(state="disabled")

def somefunction():
    self.output_box.configure(state="normal")
    (some function goes here)
    self.output_box.configure(state="disable")
于 2013-01-01T14:54:36.317 回答
3

我也偶然发现了 state="normal"/state="disabled" 解决方案,但是您无法从中选择和复制文本。最后我找到了以下解决方案:有没有办法让 Tkinter 文本小部件只读?,并且此解决方案允许您选择和复制文本以及跟踪超链接。

import Tkinter

root = Tkinter.Tk() 
readonly = Tkinter.Text(root)
readonly.bind("<Key>", lambda e: "break")
于 2016-12-21T06:01:32.833 回答