tkinter學習-文本框


閱讀目錄

  • 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視頻教程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM