如果我想在Tkinter中输入一个只接受大于或等于0.0且小于或等于1.0的浮点数的输入框,我该怎么做?
答案 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()