3

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

干杯,

4

3 回答 3

8

我不知道通过简单切换设置来做这样的事情的方法,我想你需要通过信号来处理这个,一种方法是连接到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)
于 2010-04-28T05:47:26.553 回答
4

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

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

于 2011-06-23T19:34:38.150 回答
0

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

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

try:
    val = float(entry.get_text())
    entry.set_text(str(val))
except ValueError:
    entry.set_text('')
于 2015-03-14T19:15:42.330 回答