如何使 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