如何禁用Text小部件的输入但允许编程输入?

时间:2012-05-30 14:04:13

标签: python textbox tkinter python-2.7

我如何锁定Text窗口小部件,以便用户只能选择并复制文本,但我仍然可以从函数中插入文本Text或相似?

3 个答案:

答案 0 :(得分:15)

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

text_widget.configure(state="disabled")

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

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

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

  1. 将窗口小部件的状态更改为NORMAL
  2. 插入文字,然后
  3. 将状态更改回DISABLED
  4. 只要您不在中间调用update,用户就无法以交互方式输入任何内容。

答案 1 :(得分:4)

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

我发现如果你默认“禁用”文本小部件,然后在函数开头“正常”它给它输入并在函数结束时再次“禁用”它。

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")

答案 2 :(得分:0)

我偶然发现了state =“normal”/ state =“disabled”解决方案,但是你无法从中选择和复制文本。最后,我找到了以下解决方案:Is there a way to make the Tkinter text widget read only?,此解决方案允许您选择和复制文本以及跟踪超链接。

import Tkinter

root = Tkinter.Tk() 
readonly = Tkinter.Text(root)
readonly.bind("<Key>", lambda e: "break")