Entry beim Verlassen prüfen

Fragen zu Tkinter.
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Entry beim Verlassen prüfen

Beitragvon Mawilo » Freitag 9. Dezember 2005, 11:52

Hallo,

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()


Stephan
Benutzeravatar
wuf
User
Beiträge: 1371
Registriert: Sonntag 8. Juni 2003, 09:50

Beitragvon wuf » Dienstag 13. Dezember 2005, 23:51

Hallo Stephan

Du musst die folgende Methode leicht abändern:

Code: Alles auswählen

def returnEntry(self,event):
   activeEntry = event.widget #self.sf.focus_get()
   self.testFormat(activeEntry)


Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Beitragvon Mawilo » Mittwoch 14. Dezember 2005, 13:54

Hallo wuf,

danke, funktioniert wunderbar.

Stephan

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder