Python 如何获得pygtk条目仅接受浮动?
我希望用户只能键入一个浮点(即0到9之间的数字,小数点应该显示,其他字符不应该显示)。我该怎么做 编辑 我需要得到像“4”或“3.5”或“.9”这样的值,而不是像“10e23”这样的值Python 如何获得pygtk条目仅接受浮动?,python,pygtk,Python,Pygtk,我希望用户只能键入一个浮点(即0到9之间的数字,小数点应该显示,其他字符不应该显示)。我该怎么做 编辑 我需要得到像“4”或“3.5”或“.9”这样的值,而不是像“10e23”这样的值 不一致的值也应该被拒绝,例如“10.12.45”…捕获用户修改条目中的值时触发的事件,并手动验证它是否为浮点。这就像在float()周围使用try一样简单: 我不确定您是否能从“更改”事件中获得缓冲区 但是,不妨看看如何连接到条目本身中的信号: 使用输入法时会发出“preedit changed”(预编辑已更改)
不一致的值也应该被拒绝,例如“10.12.45”…捕获用户修改条目中的值时触发的事件,并手动验证它是否为浮点。这就像在
float()周围使用try
一样简单:
我不确定您是否能从“更改”事件中获得缓冲区
但是,不妨看看如何连接到条目本身中的信号:
使用输入法时会发出“preedit changed”(预编辑已更改)信号,
键入的文本不会立即提交到缓冲区。所以如果
如果您对文本感兴趣,请连接到此信号
然后,当您得到输入时,您可以检查它是否有效,然后相应地操作字段值 我终于有了一个可以接受的答案,这要感谢这么一个问题“如何从Python中的字符串中提取浮点数”
在初始部分
以及:
已连接到条目的“已更改”事件。非常感谢所有帮助过我们的人。当输入字段输入字符时,是否有任何事件可用?是否可以使用“更改”事件?否,我需要捕捉用户键入的键,并只显示那些正在进行真正浮动的键。无论如何,你的过滤器会接受字符串为“12.34.56”,而不是浮体。最后,我花了几个小时自己做这件事;但我希望一些大师会在几秒钟内出现,因为这通常发生在SO…;-)我们都没有提供一个完整的解决方案,但不是因为缺乏知识。问题很简单。在这些情况下,我们通常会提供指导,就像我给你的提示一样,但我们并没有完全实施解决方案。我们想为此得到报酬=)。祝贺你正确地理解了它!“changed”事件通过小部件,我可以从中获取缓冲区。“preedit changed”事件在理论上更好,但我看不出有什么区别。谢谢你的提示。
>>> float("1.4")
1.4
>>> float("1.4a")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 1.4a
>>>
if newCharacter in "0123456789.":
# valid
else
# invalid
numeric_const_pattern = r"""
[-+]? # optional sign
(?:
(?: \d* \. \d+ ) # .1 .12 .123 etc 9.1 etc 98.1 etc
|
(?: \d+ \.? ) # 1. 12. 123. etc 1 12 123 etc
)
# followed by optional exponent part if desired
(?: [Ee] [+-]? \d+ ) ?
"""
self.rx = re.compile(numeric_const_pattern, re.VERBOSE)
def validate_float(self, widget, entry):
entry_text = entry.get_text()
newtext = self.rx.findall(entry_text)
if len(newtext) :
entry.set_text(newtext[0])
else:
entry.set_text("")