如何使 Tkinter Text 控件变为只读

Jinku Hu 2023年1月30日
  1. 设置 Textstatedisable 将 Tkinter Text 变为只读
  2. 将任何按键都绑定到 break 功能以使 Tkinter Text 只读
如何使 Tkinter Text 控件变为只读

我们将介绍使 Tkinter Text 控件变为只读的方法,

  1. Text 状态设置为 disable
  2. 将任何按键都绑定到 break 功能

设置 Textstatedisable 将 Tkinter Text 变为只读

Text 在其状态 state 设为 disable 之后,控件变为只读。

import tkinter as tk

root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0, "ABCDEF")
readOnlyText.configure(state="disabled")
readOnlyText.pack()

root.mainloop()

Text 控件的默认状态为 NORMAL,这表示用户可以在其中编辑、添加、插入或编辑文本内容。

readOnlyText.configure(state="disabled")

你需要将 Text 窗口控件状态更改为 DISABLED 只读。任何更改该控件内文本的尝试都将被忽略。

注意
如果你打算更新的 Text 窗口控件的内容,你需要将状态从 disabled 改到 normal,否则,Text 一直是只读的。

将任何按键都绑定到 break 功能以使 Tkinter Text 只读

如果将任何击键绑定到仅返回 break 的函数到 Text 控件,我们将得到与 Text 变为只读相同的结果。

import tkinter as tk

root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0, "ABCDEF")
readOnlyText.bind("<Key>", lambda a: "break")
readOnlyText.pack()

root.mainloop()
注意

此解决方案与上面的解决方案之间的区别在于,CTRL+C 此处不起作用。这意味着你既不能编辑内容也不能复制内容。

如果我们需要 CTRL+C 有效,那我们需要将 CTRL+C 作为绑定到 Text 函数的例外。

import tkinter as tk


def ctrlEvent(event):
    if 12 == event.state and event.keysym == "c":
        return
    else:
        return "break"


root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0, "ABCDEF")
readOnlyText.bind("<Key>", lambda e: ctrlEvent(e))
readOnlyText.pack()

root.mainloop()
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - Tkinter Text