天天看點

Python tkinter 學習筆記(6) -- Entry 和 Text(簡易的文本編輯器)Python tkinter 學習筆記(6) --  Entry 和 Text

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()
           

效果:

Python tkinter 學習筆記(6) -- Entry 和 Text(簡易的文本編輯器)Python tkinter 學習筆記(6) --  Entry 和 Text

當我們第一行輸入test的時候,指令行會出現正确,反之顯示“錯誤”。

Python tkinter 學習筆記(6) -- Entry 和 Text(簡易的文本編輯器)Python tkinter 學習筆記(6) --  Entry 和 Text

 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()
           

效果:

Python tkinter 學習筆記(6) -- Entry 和 Text(簡易的文本編輯器)Python tkinter 學習筆記(6) --  Entry 和 Text
設定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()
           

效果:

Python tkinter 學習筆記(6) -- Entry 和 Text(簡易的文本編輯器)Python tkinter 學習筆記(6) --  Entry 和 Text

制作一個簡易的文本編輯器,實作打開、編輯、儲存

用到的控件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()
           

 效果:

Python tkinter 學習筆記(6) -- Entry 和 Text(簡易的文本編輯器)Python tkinter 學習筆記(6) --  Entry 和 Text
Python tkinter 學習筆記(6) -- Entry 和 Text(簡易的文本編輯器)Python tkinter 學習筆記(6) --  Entry 和 Text
Python tkinter 學習筆記(6) -- Entry 和 Text(簡易的文本編輯器)Python tkinter 學習筆記(6) --  Entry 和 Text