Python 如何获得pygtk条目仅接受浮动?

Python 如何获得pygtk条目仅接受浮动?,python,pygtk,Python,Pygtk,我希望用户只能键入一个浮点(即0到9之间的数字,小数点应该显示,其他字符不应该显示)。我该怎么做 编辑 我需要得到像“4”或“3.5”或“.9”这样的值,而不是像“10e23”这样的值 不一致的值也应该被拒绝,例如“10.12.45”…捕获用户修改条目中的值时触发的事件,并手动验证它是否为浮点。这就像在float()周围使用try一样简单: 我不确定您是否能从“更改”事件中获得缓冲区 但是,不妨看看如何连接到条目本身中的信号: 使用输入法时会发出“preedit changed”(预编辑已更改)

我希望用户只能键入一个浮点(即0到9之间的数字,小数点应该显示,其他字符不应该显示)。我该怎么做

编辑 我需要得到像“4”或“3.5”或“.9”这样的值,而不是像“10e23”这样的值


不一致的值也应该被拒绝,例如“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("")