App下載

tkinter entry文本框怎么限定輸入數(shù)字?

猿友 2021-07-19 15:02:40 瀏覽數(shù) (6547)
反饋

很多小伙伴在學習python GUI編程的時候會涉及到文本框的學習。有時候我們會有這樣的需求——文本框里只能輸入數(shù)字。那么entry文本框怎么限定輸入數(shù)字呢?接下來的這篇文章帶你了解。

網(wǎng)上找了挺久,感覺方法都不合適我這新手,想了個歪點子

from tkinter import *
from tkinter import messagebox
root=Tk()
def com():
    try:
        float(e1.get())#獲取e1的值,轉為浮點數(shù),如果不能轉捕獲異常
        l1.config(text=e1.get())
    except:
        messagebox.showwarning('警告','請輸入數(shù)字')
e1=Entry(root)
e1.pack()
Button(root,text='獲取',command=com).pack()
l1=Label(root,text='只能數(shù)字')
l1.pack()
mainloop()

補充:python Entry 文本框只能輸入數(shù)字或限定數(shù)字顯示

先給大家看代碼,表示對大家急切想法的尊敬,如果你著急用,直接拿去,不明白的話回來再看看后續(xù),我爭取講的明白,我也是一個小白,我只能按照我自己的意思去寫,如果有補充或者修改請聯(lián)系我,也請不要完全相信我,我不喜歡把你們帶到歧途?。?!

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() 創(chuàng)建主窗口
#設置標題
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 就可以
#創(chuàng)建畫布,設置要顯示的圖片,把畫布添加至應用程序窗口
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")
#設置文本只能輸入數(shù)字
def test(content):
    # 如果不加上==""的話,就會發(fā)現(xiàn)刪不完。總會剩下一個數(shù)字 isdigit函數(shù):isdigit函數(shù)方法檢測字符串是否只由數(shù)字組成。
    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)  # 需要將函數(shù)包裝一下,必要的
textEntry1 = Entry(win,bd=0,font=("華文彩云",12),relief=RIDGE,bg="lightcyan",
                    textvariable = v,  #文本框的值,是一個StringVar()對象 ,這樣與StringVar 就能更新
                    validate = "key",  # 發(fā)生任何變動的時候,就會調用validatecommand 這個調動受后面‘Key'影響,類似鍵盤監(jiān)聽 如果換成“'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()

上面是我的代碼 運行后是這樣的:

運行結果

當你輸入數(shù)字后,我賬號的文本框是可以限定的,密碼的還沒做,我是想把密碼設置成“*”,也非常簡單先給看一下兩個文本框輸入數(shù)字不同的情況:

運行結果

我先給大家介紹幾個函數(shù)分別是:

1、StringVar()函數(shù):

跟蹤變量的值的變化,以保證值的變更隨時可以顯示在界面上。通過我的查找,這個函數(shù)存在Tk模塊中,其他的我還沒有查到,這個是為了能隨時更新文本框內的內容,所以這個函數(shù)要用到

2、textvariable:

這個函數(shù)在Entry的括號內出現(xiàn)的,這個是和StringVar進行配合,然后進行更新內容。

3、validate和validatecommand:

這兩個函數(shù),講真我還沒有發(fā)現(xiàn)能分開用,一個類似于驅動,一個就是類似于被驅動后的命令,validate就是驅動著validatecommand,也可以說來就是調用。

validate他的值當然可以有很多的,我就說兩個一個是等于Key也就是代碼中的key就是為了鍵盤監(jiān)聽吧,另一個是focusout屬于光標監(jiān)聽,只要有動作,就會調用validatecommand函數(shù),他有兩個變量:一個是調用另一個函數(shù),另一個:

%P表示 當輸入框的值允許改變,該值有效。該值為當前文本框內容

%v(小寫大寫不一樣的),當前validate的值

%W表示該組件的名字

4、isdigit函數(shù):

isdigit函數(shù)方法檢測字符串是否只由數(shù)字組成。

5、win.register(test):

這個函數(shù)解釋有很多,

第一個:是python抽象類—register注冊虛擬子類

第二:register修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的話,應將其zhi保存在CPU的寄存器中,以加快其存儲速度。這個關鍵字請求編譯器盡可能的將變量存在CPU內部寄存器中而不是通過內存尋址訪問以提高效率。

而我們只是為了讓他包裝一下,讓其函數(shù)進行回調,和用于注冊程序退出時的回調函數(shù),然后在回調函數(shù)中做一些資源操作

附:

在TK中是不允許框架背景透明化,比如我剛開始一直想讓text或者標簽背景透明,這樣的話就會讓界面更加好看,試了幾種不同的方法,什么改背景色等等,但是都不可以,唯一可行的話就是麻煩一點,利用PS處理,就是P出圖片,然后給標簽或者文本框給予背景,但是相對于麻煩。

小結

以上就是entry文本框怎么限定輸入數(shù)字的全部內容,希望能給大家一個參考,也希望大家多多支持W3Cschool



0 人點贊