<p>此代码提供了一个工作解决方案:</p>
<pre><code>import pandas as pd
from tkinter import *
from tkinter import messagebox
class ValidatedEntry(Entry):
def __init__(self,master,default_value):
Entry.__init__(self,master)
if not self.validate_value(default_value):
raise ValueError('default_value of wrong type')
self.previous_value = default_value
self.insert(0,default_value)
self.config(validate='focusout',validatecommand=self.__validate_entry)
def __validate_entry(self):
if self.validate_value(self.get()):
self.previous_value = self.get()
return True
else:
messagebox.showinfo('Validation Error', 'validation failed - reverting to previous value of {0}'.format(self.previous_value))
self.delete(0,END)
self.insert(0,self.previous_value)
return False
def validate_value(self,value):
raise NotImplemented('This is abstract so you can''t implement it.')
class FloatEntry(ValidatedEntry):
def validate_value(self,value):
print('checking float {0}'.format(value))
try:
f=float(value)
return True
except Exception:
return False
class IntegerEntry(ValidatedEntry):
def validate_value(self,value):
print('checking int {0}'.format(value))
try:
i=int(value)
return True
except Exception:
return False
class DateEntry(ValidatedEntry):
def validate_value(self,value):
print('checking date {0}'.format(value))
try:
d=pd.datetime.strptime(value,'%Y-%m-%d')
return True
except Exception:
return False
master = Tk()
e1 = IntegerEntry(master,'0')
e1.pack()
e1.focus_set()
e2 = DateEntry(master,'2013-01-01')
e2.pack()
e3 = FloatEntry(master,'10.0')
e3.pack()
b = Button(master, text="get", width=10)
b.pack()
mainloop()
</code></pre>