前
首先我們知道,tkinter中有許許多多的控件,其中使用頻繁的控件之一就是Entry(輸入框),那么怎么設置它為不可編輯狀態呢?
state選項
一般我們在寫Entry的時候只傳入了一個master參數,也就是這樣,
from tkinter import *
root = Tk()
root.geometry('200x200')
lf = LabelFrame(root, text='默認狀態')
lf.place(relx=0.1, rely=0.25, relwidth=0.8, relheight=0.5)
ent1 = Entry(lf)
ent1.place(relx=0.1, rely=0.25, relwidth=0.8)
root.mainloop()
效果是這樣的:

實際上Entry有一個參數叫state ,它的值有normal, disable, readonly
其實看到這里我們就能大概知道各個狀態了。
讓我們逐一試試:
normal:
from tkinter import *
root = Tk()
root.geometry('200x200')
lf = LabelFrame(root, text='normal狀態')
lf.place(relx=0.1, rely=0.25, relwidth=0.8, relheight=0.5)
ent1 = Entry(lf, state='normal')
ent1.place(relx=0.1, rely=0.25, relwidth=0.8)
root.mainloop()
normal效果:

disable:
這里為了演示效果,我們在Entry中插入一個值,看是否能顯示
from tkinter import *
root = Tk()
root.geometry('200x200')
lf = LabelFrame(root, text='disable狀態')
lf.place(relx=0.1, rely=0.25, relwidth=0.8, relheight=0.5)
ent1 = Entry(lf, state='disable')
ent1.insert(END, 'adada')
ent1.place(relx=0.1, rely=0.25, relwidth=0.8)
root.mainloop()
disable效果:

readonly:
為了演示效果,也是提前插入一個值。
但是readonly是可讀,如果我們在初始化時就設置可讀,那么之后Entry的內容就無法再編輯
from tkinter import *
root = Tk()
root.geometry('200x200')
lf = LabelFrame(root, text='readonly狀態,初始化設置')
lf.place(relx=0.1, rely=0.25, relwidth=0.8, relheight=0.5)
ent1 = Entry(lf, state='readonly')
ent1.insert(END, 'adad')
ent1.place(relx=0.1, rely=0.25, relwidth=0.8)
root.mainloop()
readonly1效果:

我們可以在處理過Entry的文本后,利用config函數,再將其state設置為readonly,這樣更加常用。
from tkinter import *
root = Tk()
root.geometry('200x200')
lf = LabelFrame(root, text='readonly狀態,之后設置')
lf.place(relx=0.1, rely=0.25, relwidth=0.8, relheight=0.5)
ent1 = Entry(lf)
ent1.insert(END, 'adad')
ent1.config(state='readonly')
ent1.place(relx=0.1, rely=0.25, relwidth=0.8)
root.mainloop()
readonly2效果:

