如何仅允许Tkinter上的输入字段中的某些参数

时间:2017-03-26 15:08:59

标签: python tkinter

如果我想在Tkinter中输入一个只接受大于或等于0.0且小于或等于1.0的浮点数的输入框,我该怎么做?

2 个答案:

答案 0 :(得分: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函数。这将获得条目的值并检查它是否可以。根据结果​​,标签的值将被更改。

答案 1 :(得分: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))

您就像使用条目小部件一样使用它,除非您现在有_&#39;和&#39;到&#39;用于设置允许范围的参数:

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