2013-03-22 264 views
2

我在想如何設置允許進入TTK輸入字段的最大字符數。我也想限制只輸入整數的條目,似乎沒有在網上找到多少。反正這裏是我的代碼:在ttk.entry中設置數據的最大長度並將其限制爲僅限整數

from tkinter import * 
from tkinter import ttk 


root = Tk() 
root.title("Alarm Interface") 
mainframe = ttk.Frame(root, padding="3 3 12 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

code = IntVar() 


code_entry= ttk.Entry(mainframe, width=7, textvariable=code) 
code_entry.grid(columnspan = 2, column=2, row=5, sticky=(W, E)) 

ttk.Button(mainframe, text="1").grid(column=1, row=1, sticky=NW) 
ttk.Button(mainframe, text="2").grid(column=2, row=1, sticky=NW) 
ttk.Button(mainframe, text="3").grid(column=3, row=1, sticky=NW) 
ttk.Button(mainframe, text="4").grid(column=1, row=2, sticky=NW) 
ttk.Button(mainframe, text="5").grid(column=2, row=2, sticky=NW) 
ttk.Button(mainframe, text="6").grid(column=3, row=2, sticky=NW) 
ttk.Button(mainframe, text="7").grid(column=1, row=3, sticky=NW) 
ttk.Button(mainframe, text="8").grid(column=2, row=3, sticky=NW) 
ttk.Button(mainframe, text="9").grid(column=3, row=3, sticky=NW) 
ttk.Button(mainframe, text="Clear").grid(column=1, row=4, sticky=NW) 
ttk.Button(mainframe, text="0").grid(column=2, row=4, sticky=NW) 
ttk.Button(mainframe, text="Delete").grid(column=3, row=4, sticky=NW) 

ttk.Label(mainframe, text="Enter Code:").grid(column=1, row=5, sticky=W) 




for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) 

root.mainloop() 

謝謝,想法是,這是一個簡單的接口報警系統,數量範圍從0-9。

回答

1

您想要使用條目窗口小部件的validatecommandvalidate屬性。如何做到這一點在這個答案說明:https://stackoverflow.com/a/4140988/7432

下面是一個簡單的例子,顯示瞭如何禁止不產生0和999之間的數字的任何輸入(但允許空字符串):

import Tkinter as tk 
import ttk 

class ConstrainedEntry(ttk.Entry): 
    def __init__(self, *args, **kwargs): 
     ttk.Entry.__init__(self, *args, **kwargs) 

     vcmd = (self.register(self.on_validate),"%P") 
     self.configure(validate="key", validatecommand=vcmd) 

    def disallow(self): 
     self.bell() 

    def on_validate(self, new_value): 
     try: 
      if new_value.strip() == "": return True 
      value = int(new_value) 
      if value < 0 or value > 999: 
       self.disallow() 
       return False 
     except ValueError: 
      self.disallow() 
      return False 

     return True 

class Example(tk.Frame): 
    def __init__(self, *args, **kwargs): 
     tk.Frame.__init__(self, *args, **kwargs) 
     l = ttk.Label(self, text="Enter a number between 0 and 999:", anchor="w") 
     e = ConstrainedEntry(self, width=4) 
     l.pack(side="top") 
     e.pack(side="top") 

root = tk.Tk() 
Example(root).pack(side="top", fill="both", expand=True) 
root.mainloop() 
相關問題