Seite 1 von 1

Erstes PyGTK Programm problem (glade)

Verfasst: Sonntag 23. März 2008, 13:20
von Tayce
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?)

Re: Erstes PyGTK Programm problem (glade)

Verfasst: Sonntag 23. März 2008, 13:47
von Trundle
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.

Verfasst: Sonntag 23. März 2008, 14:03
von EnTeQuAk
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

Verfasst: Sonntag 23. März 2008, 14:13
von Tayce
Danke an euch beide!

Ja das mit den imports ist einfach vom Tutorial kopiert ;)