Seite 1 von 1

Auslesen von Entrys und focus_set()

Verfasst: Montag 5. September 2005, 11:19
von Steppi
Hallo zusammen,

Steh als Python Newbie wieder vor einem Problem
Ich möchte Daten aus mehreren Entry Feldern auslesen. Die eingegebenen Werte sollen geprüft werden. Ist ein Entry Feld nicht gefüllt soll der Focus auf das Entry Feld gesetzt werden.

Problem: Wie kann ich dieses Entry Feld bestimmen. Ich hab zwar die Textvariable zum Entry-Feld aber nicht den Namen des Entry. Programmierproblem oder Fehler in der herangehensweise?
Danke für Hinweise.

Code: Alles auswählen

class GUI:
	def __init__(self,master):
		.....
		global text1, text2, ...
		self.entry1 = Entry(...Textvariable = text1).grid()
		self.entry2 = Entry(...Textvariable = text2).grid()
		....

	def Entry_auslesen(self)
		Daten = text1,text2,...
		Datensatz=[]
		for Eintrag in Daten:
            		if Eintrag.get() == "":
                	
				...sowas in der Art ...
				self.Eintrag.focus_set()
		               	break
            		
			elif ....mache sonstwas...:
Die Fehlermeldung ist mir zwar auch irgenwie klar

AttributeError: GUI instance has no attribute 'Eintrag'

aber weiter hilft mir das auch nicht.
Wie macht man so was normalerweise.

Gruß Steppi

Verfasst: Montag 5. September 2005, 13:00
von mawe
Hi!

Hier eine mögliche Lösung:

Code: Alles auswählen

from Tkinter import *

class EntryField(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)

        self.entries = []
        self.evars = []

        for i in range(6):
            self.evars.append(StringVar())
            self.entries.append(
                    Entry(self, textvariable=self.evars[-1]))
            self.entries[-1].pack()

    def get(self):
        for i,var in enumerate(self.evars):
            text = var.get()
            if len(text) == 0:
                self.entries[i].focus()
                break
            print text

root = Tk()
ef = EntryField(root)
ef.pack()
Button(text="Read",command=ef.get).pack()
root.mainloop()
Gruß, mawe

Verfasst: Montag 5. September 2005, 15:03
von Steppi
Hallo mawe,

Danke für die fixe Antwort. Das hilft mir schon mal weiter. Als Newbie muss ich mir das aber heute Abend noch mal genau Schritt für Schritt anschauen um das zu verstehen.

Danke erstmal

Steppi

Verfasst: Donnerstag 29. September 2005, 13:20
von Steppi
Hallo zusammen,

Brauch jetzt doch nochmal Hilfe. Irgendwie blick ich mit der Zuordnung zu Tk Frame Entry self master nicht so richtig durch. Also selbes Problem zum Entry wie oben mal mit einer Lösung wie ich Sie mir gedacht hatte.

Code: Alles auswählen

from Tkinter import *

class GUI:
    def __init__(self,master):

        global service
        service = StringVar();benutzer = StringVar()
        self.eservice = Entry(master,textvariable = service).pack()
        self.ebenutzer = Entry(master,textvariable = benutzer).pack()
        self.bneu = Button(master, text="Hinzufügen",command = self.neu).pack()


    def neu(self):
        if 1 == 1:
            self.eservice.focus()
            print "Funktioniert"
        
main = Tk()
gui = GUI(main)
main.mainloop()
Fehlermeldung: AttributeError: 'NoneType' object has no attribute 'focus'

Ist das Entry in der Funktion neu nicht bekannt oder was?
Danke für Hinweise

Steppi

EDIT by mawe: code in python-tags gesetzt

Verfasst: Donnerstag 29. September 2005, 14:01
von mawe
Hallo Steppi!

Code: Alles auswählen

self.eservice = Entry(master,textvariable = service).pack() 
Teuflischer Fehler :) self.eservice ist jetzt kein Entry, sondern der Rückgabewert von pack(). So gehts

Code: Alles auswählen

self.eservice = Entry(master, textvariable = service)
self.eservice.pack()
Gruß, mawe

Verfasst: Donnerstag 29. September 2005, 15:36
von Gast
Hallo mawe,

pua. darauf hätte ich eigentlich selber kommen müssen.
Vielen Dank.

Steppi

Verfasst: Donnerstag 6. Oktober 2005, 10:50
von Iopodx@Gast
Übrigens muss in die "StringVars()" noch ein master mit rein. Also "StringVar(master)"...

Sowas hat mich schonmal einige Stunden beschäftigt...

MfG
Iopodx