簡體   English   中英

Tkinter Ttk Python:將文本輸入窗口小部件值限制為數字和字符數限制

[英]Tkinter Ttk Python: limiting text entry widget values to numbers and limiting amount of characters

在這里可能很容易:在tkinter,ttk中,如何限制用戶可以在輸入字段中輸入的字符數? 例如,僅允許用戶插入一個字符而限制插入其他字符的能力?

另外,我該怎么做,以便只能將Intiger輸入到所述文本輸入字段中,從而不允許用戶輸入不是{0:9}的任何字符?

謝謝:)順便說一句,我是編程的新手,所以放置越簡單越好:)

如果對顯示操作有幫助,到目前為止,這是我的程序:

from tkinter import *
from tkinter import ttk

def calculate(*args):
    try:
        valuex=int(x.get())
        valuey=int(y.get())
        valuez=int(z.get())
        cappf.set(int(str(valuex)+str(valuey))*10**valuez)
        capnf.set(int(str(valuex)+str(valuey))*10**valuez*10**-3)
        capuf.set(int(str(valuex)+str(valuey))*10**valuez*10**-6)
    except ValueError:
        pass

root=Tk()
root.title('Capacitor Calculator')

mainframe=ttk.Frame(root, padding='10 10 10 10')
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

x=StringVar()
x_entry=ttk.Entry(mainframe, width=3, textvariable=x)
x_entry.grid(column=1, row=2, sticky=(W,E))
y=StringVar()
y_entry=ttk.Entry(mainframe, width=3, textvariable=y)
y_entry.grid(column=1, row=3, sticky=(W,E))
z=StringVar()
z_entry=ttk.Entry(mainframe, width=3, textvariable=z)
z_entry.grid(column=1, row=4, sticky=(W,E))

cappf=StringVar()
capnf=StringVar()
capuf=StringVar()

ttk.Button(mainframe, width=7, text='Calculate', command=calculate).grid(column=2, row=5, sticky=(N, E, S, W))
ttk.Label(mainframe, textvariable=cappf).grid(column=2, row=2, sticky=N)
ttk.Label(mainframe, textvariable=capnf).grid(column=2, row=3, sticky=N)
ttk.Label(mainframe, textvariable=capuf).grid(column=2, row=4, sticky=N)
ttk.Label(mainframe, text='Input:').grid(column=1, row=1, sticky=N)
ttk.Label(mainframe, text='Amount:').grid(column=2, row=1, sticky=N)
ttk.Label(mainframe, text='Units:').grid(column=3, row=1, sticky=N)
ttk.Label(mainframe, text='pf').grid(column=3, row=2, sticky=N)
ttk.Label(mainframe, text='nf').grid(column=3, row=3, sticky=N)
ttk.Label(mainframe, text='uf').grid(column=3, row=4, sticky=N)
ttk.Button(mainframe, width=7, text='Quit', style='red.TButton', command=root.destroy).grid(column=2, row=6, sticky=(N, E, S, W))
ttk.Style().configure('red.TButton', foreground='red', padding=6, font='Corbel 18')
ttk.Style().configure('TLabel', padding=6, font='Corbel 16', foreground='#0077AF')
ttk.Style().configure("TButton", padding=6, relief="flat", font='Corbel 18', foreground='#00AA11')

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=3)
x_entry.focus()
y_entry.focus()
z_entry.focus()

root.bind('<Return>', calculate)
root.mainloop()

條目小部件支持驗證回調,該驗證回調通過設置驗證模式(通過validate屬性)並提供回調本身(通過validatecommand屬性)來指定。 不幸的是,Tkinter使用方法文檔很差。

驗證模式可以是字符串focusOut (在焦點離開窗口小部件時應用驗證)和key (在用戶按下鍵時應用)。 還有focusfocusIn但是我還沒有發現它們是如此有用。

驗證回調應返回一個布爾值,該布爾值說明當前(在key驗證的情況下,== new)內容是否有效。 如果驗證失敗,則更改將被拒絕(內容將被重置),無效內容回調將被調用(通過invalidcommand屬性),該回調可以完成諸如振鈴或使屏幕閃爍的操作。


更為詳盡的驗證機制是始終正式宣稱編輯有效,但更改條目的背景(或使用其他指示符)以表明編輯將被拒絕 然后,僅對表單的整體提交進行完整的驗證/拒絕(無論如何,您將要這樣做,是嗎?)。 這樣,只要用戶在完成會話之前回頭修復它們,就可以允許暫時無效的狀態。 這很有用。

您可以使用Spinbox僅輸入整數並指定值的范圍。 例如,在下面的示例中指定的旋轉框將限制用戶僅選擇0-9范圍內的值

from Tkinter import *
master = Tk()
w = Spinbox(master, from_=0, to=9)
w.pack()
mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM