1. 程式人生 > >tkinter學習-文本框

tkinter學習-文本框

最新 valid port ace print 留住 1.10 focus 唱吧

閱讀目錄

  • Entry 輸入框
  • Text 文本框

Entry:

  說明:輸入控件,用於顯示簡單的文本內容

  屬性:在輸入框中用代碼添加和刪除內容,同樣也是用insert()和delete()方法

from tkinter import *
root = Tk()
e = Entry(root)
e.pack(padx=10,pady=10) #x,y軸的邊距為10
e.insert(1,)     #第一個參數是插入的位置,
e.insert(0,)
mainloop()

結果:

    技術分享

  獲取輸入框裏的內容,可以使用Entry組件的get()方法,通常是設置tkinter的變量(一般用StringVar)掛鉤到

textvatiable選項,然後再通過get()方法來獲取

from tkinter import *

root = Tk()
root.title(山丘)
root.geometry(300x160)
Label(root,text=賬號:).place(x=30,y=30)
Label(root,text=密碼:).place(x=30,y=70)
v1 = StringVar()
v2 = StringVar()
e1 = Entry(root,textvariable=v1)
e2 = Entry(root,textvariable=v2,show=*)   #用*號代替用戶輸入的內容
e1.place(x=80,y=30) e2.place(x=80,y=70) def show(): print(賬號:%s % v1.get()) print(密碼:%s % v2.get()) e1.delete(0,END) #獲取完信息,清楚掉輸入框的 e2.delete(0,END) #0,END,表示從第0個到最後一個 Button(root,text=獲取信息,width=10,command=show).place(x=20,y=120) Button(root,text=退出,width=10,command=root.quit).place(x=180,y=120) mainloop()

結果:

    技術分享

  另外,Entry組件還支持驗證輸入的內容的合法性,例如輸入框要求輸入數字,用戶輸入的是字母那就是屬於違法了,實現該功能,必須設置的validate,validatecommand,invalidcommand三個選項。

  首先啟用驗證的開關是validate選項,該選項的值(常用的):

  ‘focus‘:當Entry組件獲得或失去焦點的時候

  ‘focusin‘:當Entry組件獲得焦點的時候

  ‘focusout‘:當Entry組件失去焦點的時候

  ‘key‘:當輸入框被編輯的時候

  其次是為validatecommand選項指定一個驗證函數,該函數只能返回True或False表示驗證結果,一般情況下驗證函數只需要知道輸入框的內容即可,

可以通過Entry組件的get()方法來獲取這個字符串。

  最後,invalidcommand選項指定的函數只有在validatecommand的返回值為False的時候才被調用。

from tkinter import *
root = Tk()
def test():
    if e1.get() == 山丘:
        print(正確)
        return True
    else:
        print(錯誤)
        return False
def test1():
    print(又錯了)
    return True
v = StringVar()
e1=Entry(root,textvariable=v,validate=focusout,validatecommand=test,invalidcommand=test1)
e2 = Entry(root)
e1.pack(padx=10,pady=5)
e2.pack(padx=10,pady=5)
mainloop()

結果:

    技術分享

  其實,還有一個隱藏的功能,為驗證函數提供一些額外的選項(常用的):

  ‘%P’:改值為輸入框的最新文本內容

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

  其中,f 是驗證函數名,s1,s2,是額外的選項,這些選項為作為參數依次的傳給f 函數,在此之前,需要調用 register()方法將驗證函數包裝起來。

from tkinter import *
root = Tk()
root.title(山丘)
root.geometry(400x150)
v1 = StringVar()
v2 = StringVar()
v3 = StringVar()
def show(content):
#註意,這裏你不能用e1.get()來獲取輸入的內容,因為validate選項指定為‘key‘
#這個時候有任何輸入操作都會攔截到這個函數中,也就是說先攔截,只有這個函數
#返回的結果為True的時候,那麽輸入框的內容才會到變量裏,所以要使用
#"%P"來獲取最新的輸入框的內容
    if content.isdigit():
        return True
    else:
        return False
show_com = root.register(show)

e1 = Entry(root,textvariable=v1,width=10,validate=key,validatecommand=(show_com,%P)).place(x=20,y=30)
Label(root,text=x).place(x=125,y=30)
e2 = Entry(root,textvariable=v2,width=10,validate=key,validatecommand=(show_com,%P)).place(x=150,y=30)
Label(root,text==).place(x=250,y=30)
e3 = Entry(root,textvariable=v3,width=10).place(x=280,y=30)

def calc():
    result = int(v1.get()) * int(v2.get())
    v3.set(result)
Button(root,text=計算結果,width=10,command=calc).place(x=150,y=90)
mainloop()

結果:

    技術分享

Text:

  說明:文本控件,用於顯示多行文本

from tkinter import *
root = Tk()
text = Text(root,width=30,height=5)
text.pack()
text.insert(INSERT,想得卻不可得\n)#INSERT索引表示光標當前的位置
text.insert(END,你奈人生何)
mainloop()

結果:

      技術分享

  當然,也可以插入image對象,

from tkinter import *
root = Tk()
text = Text(root)
text.pack()
photo = PhotoImage(file=8.gif)
def show():
    print(該舍卻舍不得,只顧著跟往事瞎扯)
b1 = Button(text,text=唱吧,command=show).place(x=0,y=0)

def show1():
    text.image_create(END,image=photo)
b2 = Button(text,text=看吧,command=show1).place(x=0,y=35)
text.window_create(INSERT,window=b1)
text.window_create(END,window=b2)
mainloop()

結果:

    技術分享

  Indexes用法:這個索引是用來指向組件中文本的位置,常用的索引類型:

  ‘line.column‘:用行號和列號組成的,註意,行號用1開始,列號用0開始。

  ‘line.end‘:行號加上‘.end’的格式表示該行的最後一個字符的位置

from tkinter import *
root = Tk()
text = Text(root,width=50,height=5)
text.pack()
text.insert(INSERT,i love you)
print(text.get(1.2,1.6))
print(text.get(1.2,1.end))
mainloop()

結果:

    技術分享

  Marks的用法:通常是嵌套在Text組件的文本中的不可見對象

  用法:mark_set()方法創建,mark_unset()方法刪除

from tkinter import *
root = Tk()
text = Text(root,width=20,height=5)
text.insert(INSERT,i love you)
text.pack()
text.mark_set(here,1.2)
text.insert(here,)
text.insert(here,)
mainloop()

結果: 

    技術分享

  只有mark_unset()方法可以解除,否則刪除別的文本,Mark仍然在

from tkinter import *
root = Tk()
text = Text(root,width=20,height=5)
text.insert(INSERT,i love you)
text.pack()
text.mark_set(hear,1.2)
text.insert(hear,)
#text.mark_unset(‘hear‘)若要刪除必須要用這個方法
text.delete(1.0,END)
text.insert(hear,)

結果:

    技術分享

  Tags:通常用於改變Text組件中的內容的樣式和功能

  tag_add():為指定的文本添加Tags

  tag_config():可以設置Tags的樣式

from tkinter import *
root = Tk()
text = Text(root,width=50,height=5)
text.pack()
text.insert(INSERT,原來你是我最想留住的幸運)
text.tag_add(tag1,1.10,1.12)
text.tag_config(tag1,background=yellow,foreground=red)
mainloop()

結果:

      技術分享

  Tags還支持事件綁定,用的是tag_bind()方法。

參看文獻:

  小甲魚的python視頻教程

tkinter學習-文本框