tkinter でいくつかの検証済みの Entry クラスを作成しようとしています。私はPython 3.3、アナコンダを使用しています。
次のコードでは、2 つのエントリのいずれかにテキストを入力し始めると、Python はそのテキストをもう一方のフィールドに挿入します。私はそれを望んでいません。1 つのフィールドは検証済みの日付で、もう 1 つのフィールドは検証済みの整数である必要があります。
私は何を間違っていますか?
すべての 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()