首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Tkinter上只允许输入字段中的某些参数

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

Stack Overflow用户
提问于 2017-03-26 23:08:59
回答 2查看 672关注 0票数 0

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

EN

Stack Overflow用户

发布于 2017-03-27 00:36:31

使用tkinter's validate capabilities的正确方式。但它实际上是一个PIA。

dsgdfg有一个很好的答案,但我可以让它更简洁、更健壮、更动态:

代码语言:javascript
运行
复制
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_‘和' to’参数来设置允许的范围之外,您可以像使用Entry小部件一样使用它:

代码语言:javascript
运行
复制
root = tk.Tk()
e1 = LimitedFloatEntry(root, from_=-2, to=5)
e1.pack()
root.mainloop()
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43030454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档