Auslesen von Entrys und focus_set()

Fragen zu Tkinter.
Antworten
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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
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
Steppi
User
Beiträge: 2
Registriert: Freitag 9. September 2005, 15:17

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
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's gemacht. (von Unbekannt)
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
Gast

Hallo mawe,

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

Steppi
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
Antworten