ich habe verschiedene Entrys, bei denen beim Verlassen eine Formatüberprüfung durchgeführt werden soll. Ist das Format falsch, so muss eine Fehlermeldung aufpoppen und das Entry wieder den Fokus bekommen.
So weit ist das kein Problem.
Aber wie kann ich beim Verlassen des Entrys eine Funktion aufrufen? Wenn ich das mit bind('<FocusOut>',Funktion) mache, bekomme ich nicht das Entry, welches verlassen wird, sondern das, was neu den Fokus hat. Wenn ich z.B. bind('<ButtonRelease 1>',Funktion) verwende, wird nur eine Möglichkeit abgefangen. Ich möchte auch nicht immer alle Entrys abfragen, sondern nur das, welches gerade verlassen wird.
Hier mein Code (ist noch nicht fertig):
Code: Alles auswählen
from Tkinter import *
import Pmw
import time
import calendar
class Worktime:
def __init__(self,frame,name,month,year):
self.frame = frame
self.name = name
self.month = month
self.year = year
self.inputFields()
def inputFields(self):
fr1 = Frame(self.frame,bd=1)
fr1.pack(fill=X)
fr2 = Frame(self.frame)
fr2.pack()
lb1 = Label(fr1,text='Datum',font=('Arial',11),width=6,relief=RIDGE).pack(side=LEFT)
lb2 = Label(fr1,text='Tag',font=('Arial',11),width=3,relief=RIDGE).pack(side=LEFT)
lb3 = Label(fr1,text='Zeit von',font=('Arial',10),width=7,relief=RIDGE).pack(side=LEFT)
lb4 = Label(fr1,text='Zeit bis',font=('Arial',10),width=7,relief=RIDGE).pack(side=LEFT)
lb5 = Label(fr1,text='Dauer',font=('Arial',11),width=6,relief=RIDGE).pack(side=LEFT)
lb6 = Label(fr1,text='Pause',font=('Arial',11),width=6,relief=RIDGE).pack(side=LEFT)
lb7 = Label(fr1,text='Arb-zeit',font=('Arial',11),width=6,relief=RIDGE).pack(side=LEFT)
self.sf = Pmw.ScrolledFrame(fr2,usehullsize = 1,hull_width = 420,hull_height = 400)
self.sf.pack()
self.wg = {}
tage = self.daysInMonth()
entrys = 2
labels = 3
for i in xrange(1,tage+1,1):
tmp = []
day = self.year,self.month,i,0,0,0,0,0,0
dates = time.localtime(time.mktime(day))
labeldate = Label(self.sf.interior(),text='%02i.%02i.'%(dates[2],dates[1]),
width=6,relief=RIDGE,font=('Arial',11),justify=CENTER)
labeldate.grid(row=i,column=0)
labelday = Label(self.sf.interior(),text='%s'%(defs.day_dic[dates[6]]),
width=3,relief=RIDGE,font=('Arial',11),justify=CENTER)
labelday.grid(row=i,column=1)
if dates[6] == 5:
labeldate['fg'] = 'blue'
labelday['fg'] = 'blue'
elif dates[6] == 6:
labeldate['fg'] = 'red'
labelday['fg'] = 'red'
entry1 = Entry(self.sf.interior(),width=7,font=('Arial',11),
relief=RIDGE,justify=CENTER)
entry1.grid(row=i,column=2)
#entry1.bind('<KeyPress Tab>',self.returnEntry)
entry1.bind('<FocusOut>',self.returnEntry)
tmp.append(entry1)
entry2 = Entry(self.sf.interior(),width=7,font=('Arial',11),
relief=RIDGE,justify=CENTER)
entry2.grid(row=i,column=3)
#entry2.bind('<KeyPress Tab>',self.returnEntry)
entry2.bind('<FocusOut>',self.returnEntry)
tmp.append(entry2)
label1 = Label(self.sf.interior(),width=6,text='',relief=RIDGE,
font=('Arial',11),justify=CENTER)
label1.grid(row=i,column=4)
tmp.append(label1)
label2 = Label(self.sf.interior(),width=6,text='',relief=RIDGE,
font=('Arial',11),justify=CENTER)
label2.grid(row=i,column=5)
tmp.append(label1)
label3 = Label(self.sf.interior(),width=6,text='',relief=RIDGE,
font=('Arial',11),justify=CENTER)
label3.grid(row=i,column=6)
tmp.append(label1)
self.wg[i] = tmp
#bu = Button(fr2,text='test',command=self.returnEntry,takefocus=0).pack()
#self.wg[1][0].insert(END,'12:00')
#self.wg[1][1].insert(END,'15:00')
def daysInMonth(self):
return calendar.monthrange(self.year,self.month)[1]
def returnEntry(self,event):
activeEntry = self.sf.focus_get()
self.testFormat(activeEntry)
def testFormat(self,entry):
if entry.get() == '':
pass
else:
print entry.get()
if __name__ == '__main__':
root = Tk()
fr = Frame(root).pack()
Worktime(fr,'tester',11,2005)
root.mainloop()