创建一个只接受数字的pygtk文本框
有没有人知道怎么用PyGTK创建一个只接受数字的文本框?我正在用Glade来搭建我的用户界面。
谢谢!
3 个回答
0
把你的文本转换成数字,如果转换失败,就处理这个错误,把文本设置为空字符串。
你可以把这个方法通用化,按照你想要的方式去匹配一个规则表达式。
try:
val = float(entry.get_text())
entry.set_text(str(val))
except ValueError:
entry.set_text('')
4
如果你不想对用户输入的数据进行清理,那就干脆不要让用户输入文本。如果你想收集小时和分钟,可以考虑使用旋转按钮或者其他控件,这样可以限制用户的选择。
你可以看看旋转按钮的例子:http://www.pygtk.org/pygtk2tutorial/examples/spinbutton.py
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)