Seite 1 von 2

Re: Label im applet aktualisieren?

Verfasst: Dienstag 14. Juni 2011, 20:03
von Barabbas
Die Callback-Funktion muss "True" zurück geben, damit sie erneut ausgelöst wird. Außerdem kann man timeout_add() weitere Parameter übergeben, die dann auch an die Callback-Funktion durchgereicht werden. So spart man sich bspw. die globale label-Variable.

Besten Gruß,

brb

Re: Label im applet aktualisieren?

Verfasst: Dienstag 14. Juni 2011, 20:31
von Arp
Danke, aber das bringts auch nicht.... scheinbar bedarf es hier wirklich einer redraw befehl da ansonsten der einmal geschriebene Text auf teufel komm raus sich nicht ändert.

Re: Label im applet aktualisieren?

Verfasst: Dienstag 14. Juni 2011, 20:53
von BlackJack
@Arp: Also ich brauche hier keinen redraw-Befehl. Es wäre vielleicht hilfreich wenn Du mal ein funktionierendes Minimalbeispiel zeigen würdest.

Code: Alles auswählen

from itertools import count
import gobject
import gtk


def main():
    def destroy(window):
        window.hide()
        gtk.main_quit()
    
    window = gtk.Window()
    window.connect('destroy', destroy)
    
    label = gtk.Label()
    label.set_text('-')
    window.add(label)
    
    def set_label_counter(counter):
        label.set_text(str(counter.next()))
        return True
        
    gobject.timeout_add_seconds(1, set_label_counter, count())
    
    window.show_all()
    gtk.main()


if __name__ == '__main__':
    main()

Re: Label im applet aktualisieren?

Verfasst: Dienstag 14. Juni 2011, 21:47
von Arp
@Blackjack

Ich glaube es macht wohl einen unterschied ob man ein gnome applet schreibt oder ein "richtiges" programm.

Das ist das letzte was ich probiert habe, und es führt nur dazu das im gnome panel eine 0 steht, und sich dann nichts tut.

Code: Alles auswählen

zahl = 0
label = gtk.Label(str(zahl))

def timer_callback():
	global zahl,label
	zahl+=1
	label.set_text(str(zahl))
	return True

def factory(applet, iid):
	global label,zahl		
	label = gtk.Label(str(zahl))
	applet.add(label)
	applet.show_all()
	gobject.timeout_add(1,timer_callback,applet)	
	return True


if __name__ == '__main__':
	print "Starting factory"	
	gnomeapplet.bonobo_factory("OAFIID:Gnome_Panel_Example_Factory", gnomeapplet.Applet.__gtype__, "Simple gnome applet example", "1.0", factory)

Re: Label im applet aktualisieren?

Verfasst: Dienstag 14. Juni 2011, 22:00
von Barabbas
Deinen Code kann man ja mit 2, 3 Änderungen so abändern, dass er ein normales Fenster erzeugt. Und dann funktioniert er immer noch nicht, was deine These in Frage stellt.

Stellen wir uns also die Frage, warum dein Code nicht funktioniert. Und da fällt die Funktion "timer_callback" ins Auge. Du über gibst "gobject.timeout_add" den Zusatz-Parameter "applet". Die Callback-Funktion kennt aber keine Parameter und schmeißt daher den Fehler

Code: Alles auswählen

TypeError: timer_callback() takes no arguments (1 given)
^CTraceback (most recent call last):
  File "tst.py", line 23, in <module>
    gtk.main()
KeyboardInterrupt
Wenn du den Fehler behebst, geht auch dein Code.

Gruß,

brb

Re: Label im applet aktualisieren?

Verfasst: Dienstag 14. Juni 2011, 22:38
von Arp
Das mit dem applet in der Übergabe war nur ne idee von mir... Aber auch ohne, funktioniert es nicht. Ich krieg zwar keinen Fehler, der Code an sich läuft, aber das Label im Panel wird trotzdem nicht geändert. Es bleibt stehts bei 0 stehen.

Re: Label im applet aktualisieren?

Verfasst: Donnerstag 16. Juni 2011, 04:37
von Arp
Ich hab das jetzt mal mit gnome als panel aufgegeben. Das neu zeichnen des Labels krieg ich einfach nicht hin. Hab stattdessen ein kleines prog mit tkinter erstellt. das hat prima funktioniert. Danke :)