2017-03-26 30 views
0

如果我想在Tkinter中只接受大於或等於0.0且小於或等於1.0的浮點數的輸入框,我該怎麼做?如何只允許在Tkinter的輸入字段中的某些參數

+1

你的意思是,它應該檢查你所提供的輸入是否是收集之後可以接受的,或者你想讓他檢查打字時? –

+0

在輸入框(key up和keydown)中添加一個回調函數,每一個按鍵都將'save value to a variable',每個按鍵向上'如果無效還原舊值,則檢查值。平均上升/下降邊緣操作。 – dsgdfg

回答

0

如果你想調用一個按鈕來檢查是否這是一種方法。

from tkinter import * 

class GUI(): 
    def __init__(self, root): 

     self.Entry_i = Entry(root, bd = 5) 

     self.test = StringVar() 
     Label_i = Label(root, textvariable = self.test) 
     Button_i = Button(root, text = "Go", command = self.floatornot) 

     self.Entry_i.grid() 
     Label_i.grid() 
     Button_i.grid() 
     mainloop() 

    def floatornot(self): 

     test = self.Entry_i.get() 
     if float(test) < 0 or float(test) > 1: 
      self.test.set("Good") 
     else: 
      self.test.set("") 

root = Tk() 
GUI(root) 

該按鈕將調用floatornot函數。這將獲得條目的價值並檢查它是否可以。根據結果​​,標籤的值將會改變。

0

它使用的正確方法tkinter's validate capabilities。但它真的是一個PIA使用。

dsgdfg有一個很好的答案,但我可以做了很多整潔,強健,更有活力:

import Tkinter as tk 

class LimitedFloatEntry(tk.Entry): 
    '''A new type of Entry widget that allows you to set limits on the entry''' 
    def __init__(self, master=None, **kwargs): 
     self.var = tk.StringVar(master, 0) 
     self.var.trace('w', self.validate) 
     self.get = self.var.get 
     self.from_ = kwargs.pop('from_', 0) 
     self.to = kwargs.pop('to', 1) 
     self.old_value = 0 
     tk.Entry.__init__(self, master, textvariable=self.var, **kwargs) 

    def validate(self, *args): 
     try: 
      value = self.get() 
      # special case allows for an empty entry box 
      if value not in ('', '-') and not self.from_ <= float(value) <= self.to: 
       raise ValueError 
      self.old_value = value 
     except ValueError: 
      self.set(self.old_value) 

    def set(self, value): 
     self.delete(0, tk.END) 
     self.insert(0, str(value)) 

您可以使用它就像一個文本輸入構件,除了現在你有「from_」和'以」參數設定允許範圍:

root = tk.Tk() 
e1 = LimitedFloatEntry(root, from_=-2, to=5) 
e1.pack() 
root.mainloop()