如何使 Tkinter Text 控件变为只读

Jinku Hu 2023年1月30日 2019年12月8日
  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()
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相关文章 - Tkinter Text