我正在尝试在 tkinter 中编写一些经过验证的 Entry 类。我在 Python 3.3 上,Anacondas。
在下面的代码中,当我开始在两个条目之一中输入文本时,python 在我输入时将该文本插入到另一个字段中。我不要那个。一个字段应该是经过验证的日期,而另一个应该是经过验证的整数。
我究竟做错了什么?
如果我注释掉所有 e1 行,那么它可以工作。如果我注释掉 e2 行,那么它可以工作。但是,如果我将两者都放在一起,那么它们会以某种方式联系在一起。
import pandas as pd
from tkinter import *
class ValidatedEntry(Entry):
def __init__(self,*args,**kwargs):
Entry.__init__(self,*args,**kwargs)
if 'default_value' in kwargs.keys():
self.default_value = kwargs['default_value']
else:
self.default_value = 0
self.previous_value = self.default_value
self.config(textvariable=self.default_value)
self.register(self.__validate_entry())
self.config(validate='focusout',validatecommand=self.__validate_entry)
def __validate_entry(self):
print('validating')
try:
self.validation_function(self.get())
self.previous_value = self.get()
return True
except Exception:
self.delete(0,END)
self.insert(0,self.previous_value)
return False
def validation_function(self,value):
print('should we get here?')
i=int(self.get())
#raise NotImplemented('This is abstract so you can''t implement it.')
class IntegerEntry(ValidatedEntry):
def validation_function(self,value):
print('checking int {0}'.format(value))
i=int(self.get())
class DateEntry(ValidatedEntry):
def validation_function(self,value):
print('checking date {0}'.format(value))
d=pd.datetime.strptime(value,'%Y-%m-%d')
master = Tk()
e1 = IntegerEntry(master)
e1.pack()
e1.focus_set()
e2 = DateEntry(master)
e2.pack()
b = Button(master, text="get", width=10)
b.pack()
mainloop()