python3.7.2 tkinter entry框限定輸入數字的操作
網上找瞭挺久,感覺方法都不合適我這新手,想瞭個歪點子
from tkinter import * from tkinter import messagebox root=Tk() def com(): try: float(e1.get())#獲取e1的值,轉為浮點數,如果不能轉捕獲異常 l1.config(text=e1.get()) except: messagebox.showwarning('警告','請輸入數字') e1=Entry(root) e1.pack() Button(root,text='獲取',command=com).pack() l1=Label(root,text='隻能數字') l1.pack() mainloop()
補充:python Entry 文本框隻能輸入數字或限定數字顯示
先給大傢看代碼,表示對大傢急切想法的尊敬,如果你著急用,直接拿去,不明白的話回來再看看後續,我爭取講的明白,我也是一個小白,我隻能按照我自己的意思去寫,如果有補充或者修改請聯系我,也請不要完全相信我,我不喜歡把你們帶到歧途!!!
import tkinter#界面繪制前初始化TK() from tkinter import * from PIL import Image,ImageTk from tkinter import messagebox #打開指定的圖片文件,縮放至指定尺寸 def get_image(filename,width,height): im = Image.open(filename).resize((width,height)) return ImageTk.PhotoImage(im) win = tkinter.Tk() #初始化TK() 創建主窗口 #設置標題 win.title("至多和") #設置界面在中間啟動 def center_window(w,h): #獲取屏幕高和寬 ws = win.winfo_screenwidth() hs = win.winfo_screenheight() #計算x,y位置 x = (ws/2) - (w/2) y = (hs/2) - (h/2) win.geometry("%dx%d+%d+%d" %(w,h,x,y)) #設置位置和大小 center_window(300,200) #設置界面大小 win.resizable(False,False) #固定其窗口的大小 也可以允許更改大小,改為TRUE 就可以 #創建畫佈,設置要顯示的圖片,把畫佈添加至應用程序窗口 canvas_win = tkinter.Canvas(win,width=300,height=200) im_win = get_image('小貓啟動界面.jpg',300,200)#設置圖片的大小 canvas_win.create_image(150,100,image=im_win) canvas_win.pack() #設置圖標 win.iconbitmap(".\\bitbug_favicon.ico") #設置文本隻能輸入數字 def test(content): # 如果不加上==""的話,就會發現刪不完。總會剩下一個數字 isdigit函數:isdigit函數方法檢測字符串是否隻由數字組成。 if content.isdigit() or content == "": return True else: return False def number(): int ##顯示文本框作為輸入框,以及標簽作為信息 lable1 = Label(win,text="賬號:",) lable1.place(x=60,y=30) v = StringVar() #跟蹤變量的值的變化,以保證值的變更隨時可以顯示在界面上 test_cmd = win.register(test) # 需要將函數包裝一下,必要的 textEntry1 = Entry(win,bd=0,font=("華文彩雲",12),relief=RIDGE,bg="lightcyan", textvariable = v, #文本框的值,是一個StringVar()對象 ,這樣與StringVar 就能更新 validate = "key", # 發生任何變動的時候,就會調用validatecommand 這個調動受後面‘Key'影響,類似鍵盤監聽 如果換成“'focusout'"就是光標 validatecommand = (test_cmd, '%P') # %P代表輸入框的實時內容 # %P表示 當輸入框的值允許改變,該值有效。該值為當前文本框內容 # %v(小寫大寫不一樣的),當前validate的值 # %W表示該組件的名字 ) textEntry1.place(x=100,y=30,width=130,height=25) lable2 = Label(win,text="密碼:") lable2.place(x=60,y=60) textEntry2 = Entry(win,bd=0,font=("華文彩雲"),relief=RIDGE,bg="lightcyan") textEntry2.place(x=100,y=60,width=130) win.mainloop()
上面是我的代碼 運行後是這樣的:
當你輸入數字後,我賬號的文本框是可以限定的,密碼的還沒做,我是想把密碼設置成“*”,也非常簡單先給看一下兩個文本框輸入數字不同的情況:
我先給大傢介紹幾個函數分別是:
1、StringVar()函數:
跟蹤變量的值的變化,以保證值的變更隨時可以顯示在界面上。通過我的查找,這個函數存在Tk模塊中,其他的我還沒有查到,這個是為瞭能隨時更新文本框內的內容,所以這個函數要用到
2、textvariable:
這個函數在Entry的括號內出現的,這個是和StringVar進行配合,然後進行更新內容。
3、validate和validatecommand:
這兩個函數,講真我還沒有發現能分開用,一個類似於驅動,一個就是類似於被驅動後的命令,validate就是驅動著validatecommand,也可以說來就是調用。
validate他的值當然可以有很多的,我就說兩個一個是等於Key也就是代碼中的key就是為瞭鍵盤監聽吧,另一個是focusout屬於光標監聽,隻要有動作,就會調用validatecommand函數,他有兩個變量:一個是調用另一個函數,另一個:
%P表示 當輸入框的值允許改變,該值有效。該值為當前文本框內容
%v(小寫大寫不一樣的),當前validate的值
%W表示該組件的名字
4、isdigit函數:
isdigit函數方法檢測字符串是否隻由數字組成。
5、win.register(test):
這個函數解釋有很多,
第一個:是python抽象類—register註冊虛擬子類
第二:register修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的話,應將其zhi保存在CPU的寄存器中,以加快其存儲速度。這個關鍵字請求編譯器盡可能的將變量存在CPU內部寄存器中而不是通過內存尋址訪問以提高效率。
而我們隻是為瞭讓他包裝一下,讓其函數進行回調,和用於註冊程序退出時的回調函數,然後在回調函數中做一些資源操作
附:
在TK中是不允許框架背景透明化,比如我剛開始一直想讓text或者標簽背景透明,這樣的話就會讓界面更加好看,試瞭幾種不同的方法,什麼改背景色等等,但是都不可以,唯一可行的話就是麻煩一點,利用PS處理,就是P出圖片,然後給標簽或者文本框給予背景,但是相對於麻煩
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 基於Python制作一個多進制轉換工具
- Python GUI 圖形用戶界面
- Python+Tkinter制作在線個性簽名工具
- Python + Tkinter連接本地MySQL數據庫簡單實現註冊登錄
- Python爬蟲+tkinter界面實現歷史天氣查詢的思路詳解