Komisches label Problem

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

Komisches label Problem

Beitragvon gugugs » Donnerstag 8. Januar 2009, 16:27

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

Beitragvon Darii » Donnerstag 8. Januar 2009, 16:38

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

Beitragvon gugugs » Donnerstag 8. Januar 2009, 16:47

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

Beitragvon Trundle » Donnerstag 8. Januar 2009, 19:13

`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

Beitragvon gugugs » Donnerstag 8. Januar 2009, 22:02

Ah ok, vielen Dank, das habe ich verstanden

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder