有人知道如何使用仅接受数字的PyGTK创建文本字段。我正在使用Glade来构建我的UI。
干杯,
答案 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('')