创建仅接受数字的pygtk文本字段

时间:2010-04-28 04:39:53

标签: python pygtk glade

有人知道如何使用仅接受数字的PyGTK创建文本字段。我正在使用Glade来构建我的UI。

干杯,

3 个答案:

答案 0 :(得分:7)

我不知道通过简单的切换设置来做这样的事情的方法,我想你需要通过信号处理这个,一种方法是连接到changed信号然后过滤任何不是数字的东西。

简单的方法(未经测试但应该有效):

class NumberEntry(gtk.Entry):
    def __init__(self):
        gtk.Entry.__init__(self)
        self.connect('changed', self.on_changed)

    def on_changed(self, *args):
        text = self.get_text().strip()
        self.set_text(''.join([i for i in text if i in '0123456789']))

如果你想要格式化的数字,你当然可以使用正则表达式或其他东西更加花哨,以确定哪些字符应留在条目中。

修改
由于您可能不想在Python中创建条目,因此我将向您展示一种“麻醉”现有条目的简单方法。

    def numbify(widget):
        def filter_numbers(entry, *args):
            text = entry.get_text().strip()
            entry.set_text(''.join([i for i in text if i in '0123456789']))

        widget.connect('changed', filter_numbers)

    # Use gtk.Builder rather than glade, you'll need to change the format of your .glade file in Glade accordingly
    builder = gtk.Builder()
    builder.add_from_file('yourprogram.glade')
    entry = builder.get_object('yourentry')

    numbify(entry)

答案 1 :(得分:4)

如果您不想清理用户输入,请避免完全允许文本输入。如果您正在尝试收集小时和分钟,那么旋转按钮或其他小部件如何限制用户的选择。

查看旋钮按钮示例: http://www.pygtk.org/pygtk2tutorial/examples/spinbutton.py

答案 2 :(得分:0)

将文本转换为数字,以防它没有处理错误并将文本设置为空字符串。

您可以将其概括为与您想要的正则表达式匹配

try:
    val = float(entry.get_text())
    entry.set_text(str(val))
except ValueError:
    entry.set_text('')