程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python GUI多行輸入文本Text的實現

編輯:Python

目錄

Text的屬性wrap

設置垂直滾動條

設置水平滾動條

獲得文本內容

Text的屬性wrapfrom tkinter import *root = Tk()root.geometry('200x300')te = Text(root,height=20,width=15)#將多行輸入文本放入(pack)窗口中te.pack()#持續運行程序root.mainloop()

這個文本框的高度為20,寬度為15,單位為字符。可以看到當每行的內容不會超過15字符,不斷輸入會發現,當所輸入的內容超過20行,文本框會自動增加新行用於輸入新的內容。

也就是說,在沒有明確說明的情況下,在多行文本輸入時,內容是不受限制的,但是每行能輸入多少字符是有限制。

當然每行能輸入的內容也可以不受到限制,這就要說到wrap屬性。

wrap和Label和Button的wraplength屬性是有差別的。wraplength是為了完全顯示標簽或按鈕的文本內容,而采取多行顯示。而Text的內容能完全顯示,wrap取不同的值。顯示的方式不一樣。

wrap可以有三個值:NONE、WORD、CHAR。

#其它的部分和上面的一樣,只是加了個wrap屬性te = Text(root,height=20,width=15,wrap=NONE)

高度和寬度還是20、15,只不過屬性wrap的值為NONE。這樣的話,在沒有手動換行的情況,每行可以不斷輸入內容。如果向文本框放入文件內容,比如text、word文件,多行文本框中每行內容和文件中的內容一致。

#wrap=CHARte = Text(root,height=20,width=15,wrap=CHAR)

#wrap=WORDte = Text(root,height=20,width=15,wrap=WORD)

上面就是wrap值為WORD和CHAR的區別。可以看到值為WORD時,文本框會保證字符的完整性,而值為CHAR時不會。兩者,每行都會限制在15個字符,只不過換行時的方式不一樣。

當文本框的內容比較多時,可以借助滾動條來浏覽內容。有垂直滾動條、水平滾動條。

設置垂直滾動條

想要的效果:當我們滑動垂直滾條時,文本內容也隨著上下變動。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')#f=tk.Frame(root)#創建滾動條對象,默認是垂直滾動條,orient=tk.VERTICALs1 = tk.Scrollbar(root) #滾動條是要放在窗口上,其參數為窗口對象#創建多行輸入文本對象b1 = tk.Text(root,width=20,height=5, yscrollcommand=s1.set)#獲取文本文件中的內容with open(r'C:\Users\Administrator\Desktop\杜甫.txt') as a: data = a.read()#將文本文件的內容放入文本框中b1.insert(tk.END,data)s1.pack(side=tk.RIGHT,fill=tk.Y)s1.config(command=b1.yview)b1.pack()#f.pack()root.mainloop()

效果圖示

創建完垂直滾動條對象和多行輸入文本對象後,需要注意:

1.yscrollcommand=s1.set,這樣滑動文本框的內容,滾動條也會滑動

2.s1.config(command=b1.yview),這樣滑動滾動條,文本框的內容也會滑動。

3.s1.pack(side=tk.RIGHT,fill=tk.Y),這樣滾動條才能充滿y軸方向,而不只是一小部分。

設置水平滾動條import tkinter as tkroot=tk.Tk()root.geometry('300x240')#f=tk.Frame(root)s1 = tk.Scrollbar(root,orient=tk.HORIZONTAL)b1 = tk.Text(root,width=20,height=5,wrap=tk.NONE, xscrollcommand=s1.set,cursor='circle', selectbackground='yellow', selectforeground='blue')#text內容的初始化with open(r'C:\Users\Administrator\Desktop\杜甫.txt') as a: data = a.read()#放進杜甫的《茅屋為秋風所破歌》b1.insert(tk.END,data)b1.pack()#獲得文本中的內容#print(b1.get(1.4,3.5),type(b1.get(1.4,3.5)))s1.pack(side=tk.BOTTOM,fill=tk.X)s1.config(command=b1.xview)#f.pack()root.mainloop()

效果圖示

設置水平滾動條會出現一個問題,就是滾動條不顯示。這是因為,在默認情況下,每行的字符數會有限制,這樣就用不上水平滾動條。如果要解除限制,或者說使放入的文本內容以其原有的方式換行,需要加入wrap=NONE。

獲得文本內容

我們知道Label、Button都有text屬性,和這兩者不同的是,Entry、Text不能用text屬性填入文本內容,Entry使用的是textvariable屬性,Text使用insert插入文本內容,Entry和Text的文本內容是動態的,可以輸入更改的。

Entry和Text均可輸入文本內容,只不過Text可以輸入多行。所以Entry沒有height屬性,而Text有。在Entry和Text輸入文本內容後,可以用get()獲得字符串形式的文本內容。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')#f=tk.Frame(root)s1 = tk.Scrollbar(root,orient=tk.HORIZONTAL)b1 = tk.Text(root,width=20,height=5,wrap=tk.NONE, xscrollcommand=s1.set,cursor='circle', selectbackground='yellow', selectforeground='blue')#text內容的初始化with open(r'C:\Users\Administrator\Desktop\杜甫.txt') as a: data = a.read()#放進杜甫的《茅屋為秋風所破歌》b1.insert(tk.END,data)b1.pack()#獲得文本中的內容#print(b1.get(1.4,3.5),type(b1.get(1.4,3.5)))s1.pack(side=tk.BOTTOM,fill=tk.X)s1.config(command=b1.xview)#f.pack()#button的回調函數def pri1(): print(b1.get(1.0, 5.0), type(b1.get(1.4, 3.5)))#由於文本內容可以隨時變化,button獲得最新的文本內容button = tk.Button(root,text='button',command=pri1)button.pack()root.mainloop()

點擊Button按鈕,會獲得文本內容

我們這裡截取的是一段。每點擊一次按鈕,獲取一次文本內容。所以創建Button按鈕可以獲取文本當前的內容。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持軟件開發網。



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved