如果我想在Tkinter中创建一个只接受大于或等于0.0且小于或等于1.0的浮点数的输入框,我该怎么做呢?
发布于 2017-03-27 00:36:31
使用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_‘和' to’参数来设置允许的范围之外,您可以像使用Entry小部件一样使用它:
root = tk.Tk()
e1 = LimitedFloatEntry(root, from_=-2, to=5)
e1.pack()
root.mainloop()发布于 2017-03-26 23:36:42
如果你想调用一个按钮来检查是否,这是一种方法。
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函数。这将获取条目的值,并检查它是否正常。根据结果,标签的值将被更改。
https://stackoverflow.com/questions/43030454
复制相似问题