Komisches label Problem

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

Wenn ich diese Funktion:

Code: Alles auswählen

	def proof(self, proof, layer, number):
		if proof!=".dvd" or layer!="LayerBreak" or number!="1913760":
			self.windowdialog=self.xml.get_widget("dialog1")

			if number!="1913760":
				sendlabel="Fehlerhafter LayerBreak"
			if layer!="LayerBreak":
				sendlabel="Dies ist keine gueltige .dvd Datei"
			if proof!=".dvd":
				sendlabel="Dies ist keine .dvd Datei"

			self.labelnow=""
			self.labelnow=self.xml.get_widget("label")
			self.labelnow.set_text(sendlabel)

			self.windowdialog.show_all()

das zweite mal ausführe, dann bekomme ich den Fehler:

AttributeError: 'NoneType' object has no attribute 'set_text'
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Dann wird wohl ``self.xml.get_widget("label")`` beim 2. Mal ``None`` zurückgeben. Ohne weitere Informationen was self.xml eigentlich ist kann und will ich dir nicht helfen.
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

self.xml ist einfach nur die .glade datei, ich habe mein gui mit glade programmiert, und da ist eine label, namens label
deshalb:

Code: Alles auswählen

self.labelnow=self.xml.get_widget("label")
meine __init__funktion:

Code: Alles auswählen

	def __init__(self):
		self.xml = gtk.glade.XML(os.path.join(os.path.dirname(sys.argv[0]), 'x360burn-0.0.2.glade'))
		self.window = self.xml.get_widget('window1')

		dic = {}
		for key in dir(self.__class__):
			dic[key] = getattr(self,key)
		self.xml.signal_autoconnect(dic)


		self.window.show()
und mit dem

Code: Alles auswählen

          self.labelnow=self.xml.get_widget("label")
          self.labelnow.set_text(sendlabel)
will ich eig. einfach nur das label umändern also den inhalt des labels und wie gesagt, beim ersten mal klappt das ja auch[/code]
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

`get_widget()` liefert immer das selbe Widget und erstellt kein neues. Und dein Label wird eben irgendwo im Laufe des Programms zerstört, beispielsweise wenn der Dialog zerstört wird. Das Label existiert also nicht mehr und `get_widget()` gibt das ordnungsgemäß zurück.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

Ah ok, vielen Dank, das habe ich verstanden
Antworten