Erstes PyGTK Programm problem (glade)

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

Sonntag 23. März 2008, 13:20

Hey,
ich hab gerade angefangen mich wieder in Python einzuarbeiten..

Jetz wollt ich mcih mal an PyGTK (Glade) ausprobieren. Hab auch ein schönes Tutorial gefunden und ich kapiers auch. (ein Wunder ist geschehen ;) )

Ich poste euch hier mal den Code, dann kommt mein Problem:

Code: Alles auswählen

#!/usr/bin/env python
import sys
try:
	import pygtk
	pygtk.require("2.0")
except:
	pass
try:
	import gtk
	import gtk.glade
except:
	sys.exit(1)

class HelloWorldGTK:
	def __init__(self):
		#set the gladefile
		self.gladefile = "test.glade"
		self.wTree = gtk.glade.XML(self.gladefile)
		#create our dict and connect it
		dic = { "on_button1_clicked" : self.button1_clicked,
			"on_button2_clicked" : self.button2_clicked,
			"on_MainWindow_destroy" : gtk.main_quit}
		self.wTree.signal_autoconnect(dic)
	def button1_clicked(self, widget):
		print "Hello World"
	def button2_clicked(self, widget):
		gtk.main_quit()
if __name__ == "__main__":
	hwg = HelloWorldGTK()
	gtk.main()
Dann noch das Gladefile:
http://tayce.ta.funpic.de/test.glade

Und jetz zum Problem:
Ich möchte das wenn ich auf button1 clicke im Textfeld "Hello World" steht.. wie bekomm ich das hin?
(self.entry1.text = "Hello World" oder wie?)
Jabber: tayce@jaim.at
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Sonntag 23. März 2008, 13:47

Tayce hat geschrieben:Ich möchte das wenn ich auf button1 clicke im Textfeld "Hello World" steht.. wie bekomm ich das hin?
Du musst dazu erst das Widget `entry1` an `self.entry1`binden, das geht mit der `get_widget`-Methode:

Code: Alles auswählen

self.entry1 = self.wTree.get_widget('entry1')
In `button1_clicked` kannst du dann den text setzen mit

Code: Alles auswählen

self.entry1.set_text('Hello, World!')
Ein Blick in die PyGTK-Referenz ist nie verkehrt, wenn man wissen will, wie manche Dinge zu machen sind.

Und die ersten paar Zeilen sind recht sinnbefreit: `pygtk.require` wirft einen AssertionError, wenn die GTK-Version nicht stimmt, den du durch den try...except-Block jedoch abfängst, also könnte man die Zeilen auch einfach weglassen. Und bei dem try-except-Block danach sollte man dem Benutzer zumindest eine hilfreiche Meldung ausgeben, dass kein gtk gefunden wurde/importiert werden konnte, und vllt auch nur einen `ImportError` abfangen und nicht alle Exceptions.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Sonntag 23. März 2008, 14:03

Du musst das Widget gar nicht an die Instanz binden.

Code: Alles auswählen

    def button1_clicked(self, widget):
        self.wTree.get_widget('entry1').set_text('Hello Word')
geht ebenso. Bei Umfangreicheren Dingen spart dir das so einige referenzen.

Und in den ersten Zeilen würde ich nicht wirklich etwas abfangen. Nicht bei denen, ist etwas nicht da wird eben der AssertionError beziehungsweise der ImportError geworfen. Da würde ich mir keine Gedanken drüber machen.

MfG EnTeQuAk
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

Sonntag 23. März 2008, 14:13

Danke an euch beide!

Ja das mit den imports ist einfach vom Tutorial kopiert ;)
Jabber: tayce@jaim.at
Antworten