如果用户在Python / Tkinter中输入字符串,如何告诉用户只使用整数?

时间:2017-03-17 02:49:06

标签: python tkinter

如果输入数字作为输入,那么给出错误并告诉用户只输入数字的最佳方法是什么?代码不起作用:

if self.localid_entry.get() == int(self.localid_entry.get():
                self.answer_label['text'] = "Use numbers only for I.D."

该变量在Tkinter中获得:

    self.localid2_entry = ttk.Entry(self, width=5)
    self.localid2_entry.grid(column=3, row=2)

3 个答案:

答案 0 :(得分:3)

最佳解决方案是使用验证功能仅允许整数,这样您就不必担心用户完成后的验证。

请参阅https://stackoverflow.com/a/4140988/7432以获取仅允许字母的示例。将其转换为仅允许整数是微不足道的。

答案 1 :(得分:0)

这样的事情:

try:
    i = int(self.localid_entry.get())

except ValueError:
    #Handle the exception
    print 'Please enter an integer'

答案 2 :(得分:0)

Bryan有正确答案,但使用tkinter的验证系统非常笨重。我更喜欢使用变量上的跟踪来检查。例如,我可以创建一个只接受数字的新类型的条目:

class Prox(ttk.Entry):
    '''A Entry widget that only accepts digits'''
    def __init__(self, master=None, **kwargs):
        self.var = tk.StringVar(master)
        self.var.trace('w', self.validate)
        ttk.Entry.__init__(self, master, textvariable=self.var, **kwargs)
        self.get, self.set = self.var.get, self.var.set
    def validate(self, *args):
        value = self.get()
        if not value.isdigit():
            self.set(''.join(x for x in value if x.isdigit()))

您可以像使用Entry小部件一样使用它:

self.localid2_entry = Prox(self, width=5)
self.localid2_entry.grid(column=3, row=2)