Python tkinter 學習筆記(6) -- Entry 和 Text
目錄
Python tkinter 學習筆記(6) -- Entry 和 Text
Entry
Text
簡單的了解就是:Entry是單行文本輸入框,Text是多行文本輸入,當然Text還有更強大的功能,本章節就具體講解這兩個控件Entry
相關文法:w = Entry( master, option, ... )
其中Option如下表所示:
序号 | 可選項 & 描述 |
---|---|
1 | bg 輸入框背景顔色 |
2 | bd 邊框的大小,預設為 2 個像素 |
3 | cursor 光标的形狀設定,如arrow, circle, cross, plus 等 |
4 | font 文本字型 |
5 | exportselection 預設情況下,你如果在輸入框中選中文本,預設會複制到粘貼闆,如果要忽略這個功能刻工藝設定 exportselection=0。 |
6 | fg 文字顔色。值為顔色或為顔色代碼,如:'red','#ff0000' |
7 | highlightcolor 文本框高亮邊框顔色,當文本框擷取焦點時顯示 |
8 | justify 顯示多行文本的時候,設定不同行之間的對齊方式,可選項包括LEFT, RIGHT, CENTER |
9 | relief 邊框樣式,設定控件3D效果,可選的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。預設為 FLAT。 |
10 | selectbackground 選中文字的背景顔色 |
11 | selectborderwidth 選中文字的背景邊框寬度 |
12 | selectforeground 選中文字的顔色 |
13 | show 指定文本框内容顯示為字元,值随意,滿足字元即可。如密碼可以将值設為 show="*" |
14 | state 預設為 state=NORMAL, 文框狀态,分為隻讀和可寫,值為:normal/disabled |
15 | textvariable 文本框的值,是一個StringVar()對象 |
16 | width 文本框寬度 |
17 | xscrollcommand 設定水準方向滾動條,一般在使用者輸入的文本框内容寬度大于文本框顯示的寬度時使用。 |
在之前的文章裡面已經簡單介紹過Entry控件,這裡需要講解Show選項,在我們設定登入或者其他界面的時候會使用到這兩個屬性 ,例如在登入界面,密碼框,顯示密碼為:* 字元,具體可以參考之前的博文
這裡以另外一個好玩的執行個體作為講解,比如利用輸入框的validate、validatecommand 和 invalidcommand 選項來實作調用子程式的方式,常用在提前驗證輸入内容完整性、準确型上面,例如驗證碼之類的
代碼:
# coding=utf-8
import tkinter as tk
# 主視窗
win = tk.Tk()
win.geometry("300x200+400+200")
win.title("Tkinter Entry 用法")
# 建立驗證子程式
def test():
if e1.get() == "test":
print("正确!")
return True
else:
print("錯誤!")
e1.delete(0, "end")
return False
v = tk.StringVar()
# 第一行
l1 = tk.Label(text="驗證碼:").grid(row=0,column=0)
e1 = tk.Entry(win, textvariable=v, validate="focusout", validatecommand=test)
e1.grid(row=0,column=1)
# 第二行
l2 = tk.Label(text="驗證結果").grid(row=1,column=0)
e2 = tk.Entry(win).grid(row=1,column=1)
# 開始視窗的事件循環
win.mainloop()
效果:
當我們第一行輸入test的時候,指令行會出現正确,反之顯示“錯誤”。
Text
Text是一個比較強大的文本框工具,除了文本輸入之外,還可以臨時作為網頁浏覽器,還能能在Text插入一些常用的控件,等等
具體Option參考下表:
option | 解釋 |
---|---|
background | ①指定該Tag所描述的内容的背景顔色 ②注意:bg并不是該選項的縮寫,在這裡bg被解釋成bgstipple選項的縮寫 |
bgstipple | ①指定一個位圖作為背景,并使用background選項指定的顔色填充 ②隻有設定了background選項,該選項才會生效 ③預設的标準位圖有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question'和'warning' |
borderwidth | ①指定文本框的寬度 ②預設值是0 ③隻有設定了relief選項該選項才會生效 ④注意:該選項不能使用bd縮寫 |
fgstipple | ①指定一個位圖作為前景色 ②預設的标準位圖有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question'和'warning' |
font | ①指定該Tag所描述的内容使用的字型 |
foreground | ①指定該Tag所描述的内容使用的前景色 ②注意:fg并不是該選項的縮寫,在這裡fg被解釋為fgstipple的縮寫 |
justify | ①控制文本的對齊方式 ②預設是LEFT(左對齊),還可以選擇RIGHT(右對齊)和CENTER(居中) ③注意:需要将Tag指向該行的第一個字元,該選項才能生效 |
Imargin1 | ①設定Tag指向的文本塊第一行的縮進 ②預設值是0 ③注意:需要将Tag指向該行的第一個字元或整個文本塊,該選項才能生效 |
Imargin2 | ①設定Tag指向的文本塊除了第一行其他行的縮進 ②預設值是0 ③注意:需要将Tag指向整個文本塊,該選項才能生效 |
offset | ①設定Tag指向的文本相對于基線的偏移距離 ②可以控制文本相對于基線是升高(正數值)或者降低(負數值) ③預設值是0 |
overstrike | ①在Tag指定的文本範圍畫一條删除線 ②預設值是False |
relief | ①指定Tag對應範圍的文本的邊框樣式 ②可以使用的值有:SUNKEN,RAISED,GROOVE,RIDGE或FLAT ③預設值是FLAT(沒有邊框) |
margin | ①設定Tag指向的文本塊右側的縮進 ②預設值是0 |
spacing1 | ①設定Tag所描述的文本塊中每一行與上方的文本間隔 ②注意:自動換行不算 ③預設值是0 |
spacing2 | ①設定Tag所描述的文本塊中自動換行的各行間的空白間隔 ②注意:換行符("\n")不算 ③預設值是0 |
spacing3 | ①設定Tag所描述的文本塊中每一行與下方的文本間隔 ②注意:自動換行不算 ③預設值是0 |
tabs | ①定制Tag所描述的文本塊中Tab按鍵的功能 ②預設Tab被定義為8個字元的寬度 ③你還可以定制多個制表位:tabs=('3c', '5c', '12c')表示前三個Tab的寬度分别為3cm,5cm,12cm,接着的Tab按照最後兩個的內插補點計算,即:19cm,26cm,33cm ④你應該注意到,它上邊'c'的含義是“厘米”而不是“字元”,還可以選擇的機關有"i"(英寸),"m"(毫米),"p"(DPI,大約是'1i'等于'72p') ⑤如果是一個整型值,則機關是像素 |
underline | ①該選項設定為True的話,則Tag所描述的範圍内的文本将被畫上下劃線 ②預設值是False |
wrap | ①設定當一行文本的長度超過width選項設定的寬度時,是否自動換行。 ②該選項的值可以是:NONE(不自動換行),CHAR(按字元自動換行)和WORD(按單詞自動換行) |
在之前的文章裡面已經簡單介紹過Text控件,在使用Text的時候我們第一影響就是記事本功能,例如:寫了一個記事本(後面會寫的),當我們的内容發生改變的時候提醒使用者内容已經變化,是否儲存
建立一個簡單的文本框
代碼:
import tkinter as tk
# coding=utf-8
import tkinter as tk
# 主視窗
win = tk.Tk()
win.geometry("300x200+400+200")
win.title("Tkinter Text 用法")
# 建立一個Text
T1 = tk.Text().pack()
# 開始視窗的事件循環
win.mainloop()
效果:
設定Text的大小、文本顔色、背景顔色
import tkinter as tk
import tkinter.font as tf
# coding=utf-8
import tkinter as tk
# 主視窗
win = tk.Tk()
win.geometry("300x200+400+200")
win.title("Tkinter Entry 用法")
# 建立一個Text控件
T1 = tk.Text(font='方正小标宋')
T1.pack()
char = ['Python','Tkinter 使用方法','Hello World','使用者界面設計'] #插入到text中
for i in range(4):
a = str(i+1)+'.0'
T1.insert(a,char[i]+'\n')
#選擇中第一行前四個字
T1.tag_add("tag1", "1.0", "1.4")
#選擇中第二行所有文字
T1.tag_add("tag2", "2.0", "2.12")
# 設定第一行選中文字顔色
T1.tag_config("tag1", background="yellow", foreground="black")
# 設定第二行選中文字顔色
T1.tag_config("tag2", background="black", foreground="white")
# 開始視窗的事件循環
win.mainloop()
效果:
制作一個簡易的文本編輯器,實作打開、編輯、儲存
用到的控件Button,Scrollbar、Text
代碼:
# coding=utf-8
import tkinter as tk
from tkinter import Message, filedialog,dialog,messagebox
# 主視窗
win = tk.Tk()
# 取螢幕寬度
sw = win.winfo_screenwidth()
sh = win.winfo_screenheight()
w = 1024
h = 768
# 居中
x = (sw-w)/2
y = (sh-h)/2
# 取螢幕高度
win.geometry("%dx%d+%d+%d" % (w,h,x,y))
win.title("Tkinter Text 用法")
win.resizable(0,0)
# 建立一個Text控件
T1 = tk.Text(width=145,height=56)
T1.place(x=2,y=35)
# 添加一個縱向的滾動條
xscroll = tk.Scrollbar()
xscroll.pack(side=tk.RIGHT,fill=tk.Y)
xscroll.config(command=T1.yview)
T1.config(yscrollcommand=xscroll.set)
###### 打開檔案(Open) ######
def openfile():
fop = filedialog.askopenfilename()
rfop = open(fop,'r',encoding='utf-8')
raw = rfop.read()
win.title("Tkinter Text 用法[ "+ fop +" ]")
T1.insert("insert",raw)
Btn_open = tk.Button(win,text="打開(O)",command=openfile).place(x=2,y=2)
###### 儲存(Save) ######
def savefile():
global fsave
global fcontent
fsave = filedialog.asksaveasfilename(title=u'儲存檔案')
fcontent = T1.get('1.0',tk.END)
if fsave is not None:
with open(file=fsave,mode='a+',encoding='utf-8') as file:
file.write(fcontent)
dialog.Dialog(None,{'title':'File Modified','text':'儲存完成','bitmap':'warning','default':0,'strings':('OK','Cancle')})
messagebox.showinfo(title="儲存提示",message='儲存成功!')
Btn_save = tk.Button(win,text="儲存(S)",command=savefile).place(x=55,y=2)
# 開始視窗的事件循環
win.mainloop()
效果: