欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Tkinter組件Entry的具體使用

 更新時間:2022年01月11日 14:16:03   作者:來自江南的你  
本文主要介紹了Tkinter組件Entry的具體使用,Entry組件通常用于獲取用戶的輸入文本,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

Entry(輸入框)組件通常用于獲取用戶的輸入文本。

何時使用 Entry 組件?

Entry 組件僅允許用于輸入一行文本,如果用于輸入的字符串長度比該組件可顯示空間更長,那內(nèi)容將被滾動。這意味著該字符串將不能被全部看到(你可以用鼠標(biāo)或鍵盤的方向鍵調(diào)整文本的可見范圍)。

如果你希望接收多行文本的輸入,可以使用 Text 組件(后面介紹)。

用法

使用代碼為 Entry 組件添加文本,可以使用 insert() 方法。如果要替換當(dāng)前文本,可以先使用 delete() 方法,再使用 insert() 方法實現(xiàn):

import tkinter as tk
 
master = tk.Tk()
 
e = tk.Entry(master)
e.pack(padx=20, pady=20)
 
e.delete(0, "end")
e.insert(0, "默認(rèn)文本...")
 
master.mainloop()

獲取當(dāng)前輸入框的文本,可以使用 get() 方法:

s = e.get()

你也可以綁定 Entry 組件到 Tkinter 變量(StringVar),并通過該變量設(shè)置和獲取輸入框的文本:

v = tk.StringVar()
e = tk.Entry(master, textvariable=v)
e.pack()
 
v.set("I love Python!")
s = v.get()

下邊的例子演示將 Entry 組件和 Button 組件配合,點擊 “獲取信息” 按鈕時自動清空輸入框并將內(nèi)容輸出:

import tkinter as tk
 
master = tk.Tk()
 
tk.Label(master, text="作品:").grid(row=0)
tk.Label(master, text="作者:").grid(row=1)
 
e1 = tk.Entry(master)
e2 = tk.Entry(master)
e1.grid(row=0, column=1, padx=10, pady=5)
e2.grid(row=1, column=1, padx=10, pady=5)
 
def show():
    print("作品:《%s》" % e1.get())
    print("作者:%s" % e2.get())
    e1.delete(0, "end")
    e2.delete(0, "end")
 
tk.Button(master, text="獲取信息", width=10, command=show).grid(row=3, column=0, sticky="w", padx=10, pady=5)
tk.Button(master, text="退出", width=10, command=master.quit).grid(row=3, column=1, sticky="e", padx=10, pady=5)
 
master.mainloop()

最后需要提到的是 Entry 組件允許通過以下幾種方式指定字符的位置:

數(shù)字索引號"anchoe""end""insert"鼠標(biāo)坐標(biāo)("@x")

數(shù)字索引號:常規(guī)的 Python 索引號,從 0 開始

"anchor":對應(yīng)第一個被選中的字符(如果有的話)

"end":對應(yīng)已存在文本的后一個位置

"insert":對應(yīng)插入光標(biāo)的當(dāng)前位置

鼠標(biāo)坐標(biāo)("@x"):x 是鼠標(biāo)位置與 Entry 左側(cè)邊緣的水平距離,這樣就可以通過鼠標(biāo)相對地定位字符的位置

參數(shù)

Entry(master=None, **options) (class)

master -- 父組件

**options -- 組件選項,下方表格詳細(xì)列舉了各個選項的具體含義和用法:

選項含義
background1. 設(shè)置 Entry 的背景顏色
2. 默認(rèn)值由系統(tǒng)指定
bg跟 background 一樣
borderwidth1. 設(shè)置 Entry 的邊框?qū)挾?br />2. 默認(rèn)值是 1 或 2 像素
bd跟 borderwidth 一樣
cursor1. 指定當(dāng)鼠標(biāo)在 Entry 上飄過的時候的鼠標(biāo)樣式
2. 默認(rèn)值由系統(tǒng)指定
exportselection1. 指定選中的文本是否可以被復(fù)制到剪貼板
2. 默認(rèn)值是 True
3. 可以修改為 False 表示不允許復(fù)制文本
font1. 指定 Entry 中文本的字體
2. 默認(rèn)值由系統(tǒng)指定
foreground1. 設(shè)置 Entry 的文本顏色
2. 默認(rèn)值由系統(tǒng)指定
fg跟 foreground 一樣
highlightbackground1. 指定當(dāng) Entry 沒有獲得焦點的時候高亮邊框的顏色
2. 默認(rèn)值由系統(tǒng)指定
highlightcolor1. 指定當(dāng) Entry 獲得焦點的時候高亮邊框的顏色
2. 默認(rèn)值由系統(tǒng)指定
highlightthickness1. 指定高亮邊框的寬度
2. 默認(rèn)值是 1 或 2 像素
insertbackground指定輸入光標(biāo)的顏色
insertborderwidth1. 指定輸入光標(biāo)的邊框?qū)挾?br />2. 如果被設(shè)置為非 0 值,光標(biāo)樣式會被設(shè)置為 RAISED
3. 小甲魚溫馨提示:將 insertwidth 設(shè)置大一點才能看到效果哦
insertofftime1. 該選項控制光標(biāo)的閃爍頻率(滅)
2. 單位是毫秒
insertontime1. 該選項控制光標(biāo)的閃爍頻率(亮)
2. 單位是毫秒
insertwidth1. 指定光標(biāo)的寬度
2. 默認(rèn)值是 1 或 2 像素
invalidcommand1. 指定當(dāng)輸入框輸入的內(nèi)容“非法”時調(diào)用的函數(shù)
2. 也就是指定當(dāng) validateCommand 選項指定的函數(shù)返回 False 時的函數(shù)
3. 詳見本內(nèi)容最下方小甲魚關(guān)于驗證詳解
invcmd跟 invalidcommand 一樣
justify1. 定義如何對齊輸入框中的文本
2. 使用 "left","right" 或 "center"
3. 默認(rèn)值是 "left"
relief1. 指定邊框樣式
2. 默認(rèn)值是 "sunken"
3. 其他可以選擇的值是 "flat","raised","groove" 和 "ridge"
selectbackground1. 指定輸入框的文本被選中時的背景顏色
2. 默認(rèn)值由系統(tǒng)指定
selectborderwidth1. 指定輸入框的文本被選中時的邊框?qū)挾龋ㄟx中邊框)
2. 默認(rèn)值由系統(tǒng)指定
selectforeground1. 指定輸入框的文本被選中時的字體顏色
2. 默認(rèn)值由系統(tǒng)指定
show1. 設(shè)置輸入框如何顯示文本的內(nèi)容
2. 如果該值非空,則輸入框會顯示指定字符串代替真正的內(nèi)容
3. 將該選項設(shè)置為 "*",則是密碼輸入框
state1. Entry 組件可以設(shè)置的狀態(tài):"normal","disabled" 或 "readonly"(注意,它跟 "disabled" 相似,但它支持選中和拷貝,只是不能修改,而 "disabled" 是完全禁止)
2. 默認(rèn)值是 "normal"
3. 注意,如果此選項設(shè)置為 "disabled" 或 "readonly",那么調(diào)用 insert() 和 delete() 方法都會被忽略
takefocus1. 指定使用 Tab 鍵可以將焦點移動到輸入框中
2. 默認(rèn)是開啟的,可以將該選項設(shè)置為 False 避免焦點在此輸入框中
textvariable1. 指定一個與輸入框的內(nèi)容相關(guān)聯(lián)的 Tkinter 變量(通常是 StringVar)
2. 當(dāng)輸入框的內(nèi)容發(fā)生改變時,該變量的值也會相應(yīng)發(fā)生改變
validate1. 該選項設(shè)置是否啟用內(nèi)容驗證
2. 詳見本內(nèi)容最下方小甲魚關(guān)于驗證詳解
validatecommand1. 該選項指定一個驗證函數(shù),用于驗證輸入框內(nèi)容是否合法
2. 驗證函數(shù)需要返回 True 或 False 表示驗證結(jié)果
3. 注意,該選項只有當(dāng) validate 的值非 "none" 時才有效
3. 詳見本內(nèi)容最下方小甲魚關(guān)于驗證詳解
vcmd跟 validatecommand 一樣
width1. 設(shè)置輸入框的寬度,以字符為單位
2. 默認(rèn)值是 20
3. 對于變寬字體來說,組件的實際寬度等于字體的平均寬度乘以 width 選項的值
xscrollcommand1. 與 scrollbar(滾動條)組件相關(guān)聯(lián)
2. 如果你覺得用戶輸入的內(nèi)容會超過該組件的輸入框?qū)挾?,那么可以考慮設(shè)置該選項
3. 使用方法可以參考:Scrollbar 組件

方法

delete(first, last=None) 

-- 刪除參數(shù) first 到 last 范圍內(nèi)(包含 first 和 last)的所有內(nèi)容
-- 如果忽略 last 參數(shù),表示刪除 first 參數(shù)指定的選項
-- 使用 delete(0, END) 實現(xiàn)刪除輸入框的所有內(nèi)容

get()

-- 獲得當(dāng)前輸入框的內(nèi)容

icursor(index)

-- 將光標(biāo)移動到 index 參數(shù)指定的位置
-- 這同時也會設(shè)置 INSERT 的值

index(index) 

-- 返回與 index 參數(shù)相應(yīng)的選項的序號(例如 e.index(END))

insert(index, text) 

-- 將 text 參數(shù)的內(nèi)容插入到 index 參數(shù)指定的位置
-- 使用 insert(INSERT, text) 將 text 參數(shù)指定的字符串插入到光標(biāo)的位置
-- 使用 insert(END, text) 將 text 參數(shù)指定的字符串插入到輸入框的末尾

scan_dragto(x) 

--  見下方 scan_mark(x)

scan_mark(x)

-- 使用這種方式來實現(xiàn)輸入框內(nèi)容的滾動
-- 需要將鼠標(biāo)按下事件綁定到 scan_mark(x) 方法(x 是鼠標(biāo)當(dāng)前的水平位置),然后再將 <motion> 事件綁定到 scan_dragto(x) 方法(x 是鼠標(biāo)當(dāng)前的水平位置),就可以實現(xiàn)輸入框在當(dāng)前位置和 sacn_mack(x) 指定位置之間的水平滾動

select_adjust(index)
-- 與 selection_adjust(index) 相同,見下方解釋

select_clear()
-- 與 selection_clear() 相同,見下方解釋

select_from(index)
-- 與 selection_from(index) 相同,見下方解釋

select_present()
-- 與 selection_present() 相同,見下方解釋

select_range(start, end)
-- 與 selection_range(start, end) 相同,見下方解釋

select_to(index)
-- 與 selection_to(index) 相同,見下方解釋

selection_adjust(index)
-- 該方法是為了確保輸入框中選中的范圍包含 index 參數(shù)所指定的字符
-- 如果選中的范圍已經(jīng)包含了該字符,那么什么事情也不會發(fā)生
-- 如果選中的范圍不包含該字符,那么會從光標(biāo)的位置將選中的范圍擴(kuò)展至該字符

selection_clear()
-- 取消選中狀態(tài)

selection_from(index)
-- 開始一個新的選中范圍
-- 會設(shè)置 ANCHOR 的值

selection_present()
-- 返回輸入框是否有處于選中狀態(tài)的文本
-- 如果有則返回 True,否則返回 False

selection_range(start, end)
-- 設(shè)置選中范圍
-- start 參數(shù)必須必 end 參數(shù)小
-- 使用 selection_range(0, END) 選中整個輸入框的所有內(nèi)容

selection_to(index)
-- 選中 ANCHOR 到 index 參數(shù)的間的所有內(nèi)容

xview(index)
-- 該方法用于確保給定的 index 參數(shù)所指定的字符可見
-- 如有必要,會滾動輸入框的內(nèi)容

xview_moveto(fraction)
-- 根據(jù) fraction 參數(shù)給定的比率調(diào)整輸入框內(nèi)容的可見范圍
-- fraction 參數(shù)的范圍是 0.0 ~ 1.0,0.0 表示輸入框的開始位置,1.0 表示輸入框的結(jié)束位置

xview_scroll(number, what)
-- 根據(jù)給定的參數(shù)水平滾動輸入框的可見范圍
-- number 參數(shù)指定滾動的數(shù)量,如果是負(fù)數(shù)則表示反向滾動
-- what 參數(shù)指定滾動的單位,可以是 UNITS 或 PAGES(UNITS 表示一個字符單元,PAGES 表示一頁)

關(guān)于驗證詳解

由于查看了不少資料,很多在這里都沒有解釋清楚,所以這里單獨列出來詳細(xì)講解下。

Entry 組件是支持驗證輸入內(nèi)容的合法性的,比如要求輸入數(shù)字,你輸入了字母那就是非法。實現(xiàn)該功能,需要通過設(shè)置 validate、validatecommand 和 invalidcommand 選項。

首先啟用驗證的“開關(guān)”是 validate 選項,該選項可以設(shè)置的值有:

含義
'focus'當(dāng) Entry 組件獲得或失去焦點的時候驗證
'focusin'當(dāng) Entry 組件獲得焦點的時候驗證
'focusout'當(dāng) Entry 組件失去焦點的時候驗證
'key'當(dāng)輸入框被編輯的時候驗證
'all'當(dāng)出現(xiàn)上邊任何一種情況的時候驗證
'none'1. 關(guān)閉驗證功能
2. 默認(rèn)設(shè)置該選項(即不啟用驗證)
3. 注意,是字符串的 'none',而非 None

其次是為 validatecommand 選項指定一個驗證函數(shù),該函數(shù)只能返回 True 或 False 表示驗證的結(jié)果。一般情況下驗證函數(shù)只需要知道輸入框的內(nèi)容即可,可以通過 Entry 組件的 get() 方法獲得該字符串。

下邊的例子中,在第一個輸入框輸入“CSDN” 并通過 Tab 鍵或者鼠標(biāo)將焦點轉(zhuǎn)移到第二個輸入框的時候,驗證功能被成功觸發(fā):

import tkinter as tk
 
master = tk.Tk()
 
def test():
    if e1.get() == "CSDN":
        print("正確!")
        return True
    else:
        print("錯誤!")
        e1.delete(0, "end")
        return False
 
v = tk.StringVar()
 
e1 = tk.Entry(master, textvariable=v, validate="focusout", validatecommand=test)
e2 = tk.Entry(master)
e1.pack(padx=10, pady=10)
e2.pack(padx=10, pady=10)
 
master.mainloop()

然后,invalidcommand 選項指定的函數(shù)只有在 validatecommand 的返回值為 False 的時候才被調(diào)用。

下邊的例子中,在第一個輸入框輸入“csdn”,并通過 Tab 鍵將焦點轉(zhuǎn)移到第二個輸入框,validatecommand 指定的驗證函數(shù)被觸發(fā)并返回 False,接著 invalidcommand 被觸發(fā):

import tkinter as tk
 
master = tk.Tk()
 
def test():
    if e1.get() == "CSDN":
        print("正確!")
        return True
    else:
        print("錯誤!")
        e1.delete(0, "end")
        return False
 
def test2():
    print("我被調(diào)用了......")
    return True
 
v = tk.StringVar()
 
e1 = tk.Entry(master, textvariable=v, validate="focusout", validatecommand=test, invalidcommand=test2)
e2 = tk.Entry(master)
e1.pack(padx=10, pady=10)
e2.pack(padx=10, pady=10)
 
master.mainloop()

最后,其實 Tkinter 還有隱藏技能,不過需要冷卻才能觸發(fā),請聽我一一道來......

Tkinter 為驗證函數(shù)提供一些額外的選項:

額外選項含義
'%d'操作代碼:0 表示刪除操作;1 表示插入操作;2 表示獲得、失去焦點或 textvariable 變量的值被修改
'%i'1. 當(dāng)用戶嘗試插入或刪除操作的時候,該選線表示插入或刪除的位置(索引號)
2. 如果是由于獲得、失去焦點或 textvariable 變量的值被修改而調(diào)用驗證函數(shù),那么該值是 -1
'%P'1. 當(dāng)輸入框的值允許改變的時候,該值有效
2. 該值為輸入框的最新文本內(nèi)容
'%s'該值為調(diào)用驗證函數(shù)前輸入框的文本內(nèi)容
'%S'1. 當(dāng)插入或刪除操作觸發(fā)驗證函數(shù)的時候,該值有效
2. 該選項表示文本被插入和刪除的內(nèi)容
'%v'該組件當(dāng)前的 validate 選項的值
'%V'1. 調(diào)用驗證函數(shù)的原因
2. 該值是 'focusin','focusout','key' 或 'forced'(textvariable 選項指定的變量值被修改)中的一個
'%W'該組件的名字

為了使用這些選項,你可以這樣寫:validatecommand=(f, s1, s2, ...)

其中,f 就是你“冷卻后”的驗證函數(shù)名,s1、s2、s3 這些是額外的選項,這些選項會作為參數(shù)依次傳給 f 函數(shù)。我們剛剛說了,使用隱藏技能前需要冷卻,其實就是調(diào)用 register() 方法將驗證函數(shù)包裝起來:

import tkinter as tk
 
master = tk.Tk()
 
v = tk.StringVar()
 
def test(content, reason, name):
    if content == "CSDN":
        print("正確!")
        print(content, reason, name)
        return True
    else:
        print("錯誤!")
        print(content, reason, name)
        return False
 
testCMD = master.register(test)
e1 = tk.Entry(master, textvariable=v, validate="focusout", validatecommand=(testCMD, '%P', '%v', '%W'))
e2 = tk.Entry(master)
e1.pack(padx=10, pady=10)
e2.pack(padx=10, pady=10)
 
master.mainloop()

當(dāng)我故意輸入“CSDN我愛你”的時候,DUANG的一下,是錯誤的,后來我果斷刪除了“我愛你”,嘿,又正確了:

 到此這篇關(guān)于Tkinter組件Entry的具體使用的文章就介紹到這了,更多相關(guān)Tkinter Entry內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • matplotlib實現(xiàn)矩陣和圖像的可視化表示

    matplotlib實現(xiàn)矩陣和圖像的可視化表示

    這篇文章主要為大家詳細(xì)介紹了如何利用matplotlib實現(xiàn)矩陣和圖像的可視化表示,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下
    2024-03-03
  • Python基于Opencv來快速實現(xiàn)人臉識別過程詳解(完整版)

    Python基于Opencv來快速實現(xiàn)人臉識別過程詳解(完整版)

    這篇文章主要介紹了Python基于Opencv來快速實現(xiàn)人臉識別過程詳解(完整版)隨著人工智能的日益火熱,計算機(jī)視覺領(lǐng)域發(fā)展迅速,今天就為大家?guī)碜罨A(chǔ)的人臉識別基礎(chǔ),從一個個函數(shù)開始走進(jìn)這個奧妙的世界,需要的朋友可以參考下
    2019-07-07
  • 利用python獲取想要搜索的數(shù)據(jù)

    利用python獲取想要搜索的數(shù)據(jù)

    這篇文章主要介紹了利用Python爬蟲采集想要搜索的信息(利用某du的接口實現(xiàn))并且處理掉它的反爬手段,文中示例代碼很詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴快來一起學(xué)習(xí)吧
    2023-05-05
  • 在Python中使用模塊的教程

    在Python中使用模塊的教程

    這篇文章主要介紹了在Python中使用模塊的教程,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • python3實現(xiàn)域名查詢和whois查詢功能

    python3實現(xiàn)域名查詢和whois查詢功能

    本篇文章給大家分享了python3實現(xiàn)域名查詢和whois查詢功能的詳細(xì)代碼,有需要的朋友參考學(xué)習(xí)下。
    2018-06-06
  • VSCODE配置Markdown及Markdown基礎(chǔ)語法詳解

    VSCODE配置Markdown及Markdown基礎(chǔ)語法詳解

    這篇文章主要介紹了VSCODE配置Markdown及Markdown基礎(chǔ)語法詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • python使用Matplotlib畫條形圖

    python使用Matplotlib畫條形圖

    這篇文章主要為大家詳細(xì)介紹了python使用Matplotlib畫條形圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python 對Excel求和、合并居中的操作

    Python 對Excel求和、合并居中的操作

    這篇文章主要介紹了Python 對Excel求和、合并居中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python爬蟲之自制英漢字典

    python爬蟲之自制英漢字典

    這篇文章主要為大家詳細(xì)介紹了python爬蟲之自制英漢字典的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python pass 語句使用示例

    Python pass 語句使用示例

    這篇文章主要介紹了Python pass 語句的使用方法示例,需要的朋友可以參考下
    2014-03-03

最新評論