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
Label im applet aktualisieren?
@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()
@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.
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)
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
Wenn du den Fehler behebst, geht auch dein Code.
Gruß,
brb
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
Gruß,
brb
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.