Python 输入仅接受浮动8,2
我需要使用tkinter python来定义一个输入字段,该字段只接受一个带有8个整数和2个小数的浮点字段,如果它不符合8.2格式,可能会显示一条错误消息。您可以帮助我定义此字段的格式。有选项Python 输入仅接受浮动8,2,python,tkinter,tkinter-entry,Python,Tkinter,Tkinter Entry,我需要使用tkinter python来定义一个输入字段,该字段只接受一个带有8个整数和2个小数的浮点字段,如果它不符合8.2格式,可能会显示一条错误消息。您可以帮助我定义此字段的格式。有选项validate=和validatecommand=,您可以在 还有 但您也可以绑定event以执行可用于检查条目中的值的函数 我使用点分割文本。如果我得到超过2个部分,那么就有超过2个点 然后我检查第二部分是否存在,是否为空,是否只有数字,是否不超过8个字符。类似于我检查第一部分的方式 当字符串无效时,我
validate=
和validatecommand=
,您可以在
还有
但您也可以绑定event
以执行可用于检查条目中的值的函数
我使用点分割文本。如果我得到超过2个部分,那么就有超过2个点
然后我检查第二部分是否存在,是否为空,是否只有数字,是否不超过8个字符。类似于我检查第一部分的方式
当字符串无效时,我只在控制台中打印消息,但您可以做更多的事情-您可以在条目中显示messagebox或替换文本
import tkinter as tk
def check(event):
text = event.widget.get()
print('text:', text)
parts = text.split('.')
parts_number = len(parts)
if parts_number > 2:
print('too much dots')
if parts_number > 1 and parts[1]: # don't check empty string
if not parts[1].isdecimal() or len(parts[1]) > 2:
print('wrong second part')
if parts_number > 0 and parts[0]: # don't check empty string
if not parts[0].isdecimal() or len(parts[0]) > 8:
print('wrong first part')
root = tk.Tk()
e = tk.Entry(root)
e.pack()
e.bind('<KeyRelease>', check)
root.mainloop()
你的意思是8位和2位小数?你可以得到字符串,用点分割,然后检查两部分的长度和数字。欢迎使用堆栈溢出,请在发布前尝试搜索你的问题。有关tkinter中的基本验证,请参阅。这将为验证逻辑提供一个良好的起点。谢谢您的帮助,但这不是我想要的。实际上,必须能够插入一个仅限数字的字段,最多8个整数和2个小数。不得允许输入字母字符。实际上,如果在字段的出口处输入12352.45,其格式将为12.352,45。谢谢如果新字符不是数字,您可以随时替换条目中的文本。您还可以尝试使用validatecommand=
来阻止某些键。但您必须手动检查字符串是否具有正确的格式-与我的示例类似,或者您可以尝试使用正则表达式检查格式。我添加了带有validate=
的示例,感谢这正是我要查找的内容,您可以添加这样的内容:当您离开字段焦点时,使用数百个点更新值。例如:12345678,69 12.245.678,58谢谢如果我添加了数百分,那么它将与现有规则不匹配,并且以后编辑它会有问题-它将需要更多的工作。当您关注或更改所有规则时,您必须将其转换回没有点的版本。
import tkinter as tk
def check(d, i, P, s, S, v, V, W):
#print("d='%s'" % d)
#print("i='%s'" % i)
#print("P='%s'" % P)
#print("s='%s'" % s)
#print("S='%s'" % S)
#print("v='%s'" % v)
#print("V='%s'" % V)
#print("W='%s'" % W)
text = P #e.get()
print('text:', text)
parts = text.split('.')
parts_number = len(parts)
if parts_number > 2:
#print('too much dots')
return False
if parts_number > 1 and parts[1]: # don't check empty string
if not parts[1].isdecimal() or len(parts[1]) > 2:
#print('wrong second part')
return False
if parts_number > 0 and parts[0]: # don't check empty string
if not parts[0].isdecimal() or len(parts[0]) > 8:
#print('wrong first part')
return False
return True
# --- main ---
root = tk.Tk()
vcmd = (root.register(check), '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
e = tk.Entry(root, validate='key', validatecommand=vcmd)
e.pack()
root.mainloop()