Textfeld in Gui mit Glade und Python

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
CellarDoor
User
Beiträge: 3
Registriert: Mittwoch 20. Januar 2016, 12:54

Hallo Liebe Python Geminschaft,

ich habe gerade mit Python begonnen und habe folgerndes Problem. Ich hoffe, dass ich hier richtig bin und wär über eure Hilfe sehr froh.

wie der Titel schon sagt, versuche ich ein Textfeld in meiner Gui mit einem Knopfdruck auszulesen, um den String dann in meinem Programm weiterzuverarbeiten. Das sieht bis jetzt in etwa so aus (vereinfacht)

Code: Alles auswählen

class Handler:
		def enter_callback(self, widget, entry):
        	self_entry = entry.get_text()

Code: Alles auswählen

	def on_singleshot_button_pressed(self, button):
		print self_entry

Code: Alles auswählen

	def main():
		global self_entry
		entry = gtk.Entry()
		self_entry = builder.get_object("entry")

als Fehlermeldung bekomme ich
gtk.Entry object at 0x3264da0 <GtkEntry at 0x25aa078>>
es wäre toll, wenn mir jemand weiterhelfen könnte

xx Conny
BlackJack

@CellarDoor: Du gibst das `Entry`-Objekt aus, Du willst aber den Text der in dem Entry steht. Dazu musst Du den mit der entsprechenden Methode auf dem Objekt abrufen.

Edit: Ich sehe gerade an dem Quelltext den Du gepostet hast das Du im Grunde sogar schon weisst wie das geht.

Edit2: Und so wie das da gemacht wird, ist es kaputt weil ein Objekt zu einer Zeit immer nur einen Wert an ein Attribut gebunden haben kann. Mal ein `Entry` und mal dessen Textinhalt an das gleiche Attribut zu binden ist falsch, denn danach kann man nicht mehr auf das `Entry`-Exemplar zugreifen.

Zeig demnächst am besten echten Code dann braucht man nicht raten was Du tatsächlich machst oder ob das nur so ungefähr das ist was Du tatsächlich machst, und ob in beiden Varianten überhaupt das Problem besteht oder vielleicht in einer gar nicht, oder ähnlich, oder ganz was anderes. Hier haben wir zum Beispiel das Problem das Du gar keine Attribute hast sondern nur lokale Namen die einen `self_`-Präfix haben der *so* keinen Sinn macht.
CellarDoor
User
Beiträge: 3
Registriert: Mittwoch 20. Januar 2016, 12:54

Danke für die rasche Antwort

Wie gesagt ich bin totaler python Anfänger. Der Code, den ich gepostet habe, ist der echte Code, ich habe nur Code weggelasse, der mit der Entry box nichts zu tun hat und schon funktioniert.

könntest du mir vielleicht sagen, was genau ich ändern sollte, damit es klappt ?
BlackJack

@CellarDoor: Okay, ich hatte das ``global`` in `main()` nicht gesehen. Vergiss bitte ``global`` sofort wieder. Das hat in einem sauberen Programm nichts zu suchen. Insbesondere wenn man objektorientiert programmiert, gibt es keine Ausrede mehr ``global`` zu verwenden.

Ich würde empfehlen erst einmal Python zu lernen. Die Grunddatentypen, Funktionen, Klassen und objektorientierte Programmierung, und dann erst GUI, denn GUI-Programmierung braucht das alles als Voraussetzung und wirklich *alles* auf einmal zu lernen ist für Anfänger vielleicht nicht die beste Idee.
CellarDoor
User
Beiträge: 3
Registriert: Mittwoch 20. Januar 2016, 12:54

@blackjack: ich habe nicht vor Python zu lernen, zumal ich auch gar nicht die Zeit dazu habe. Im Moment arbeite ich an einem Projekt und die Gui ist nur ein sehr kleiner Teil davon. Und dafür muss ich einen String über ein Textfeld einlesen. Es funktioniert schoin alles bis auf das Textfeld. Wenn du weißt, wie das geht, kannst du mir bitte helfen? Sonst bin ich nämlich aufgeschmissen

Das Programm muss auch nicht sauber sein
Antworten