2010-06-23 5 views
1

J'ai un problème avec treeview liststore essayant d'obtenir une mise à jour en temps réel, et j'ai créé un exemple pour simuler ce que je voudrais faire. Je veux liststore1 mis à jour chaque boucle.python - gtk treeview - liststore avec mise à jour en temps réel

http://img204.imageshack.us/i/capturadetela5.png/

il doit mettre à jour la colonne treeview « vitesse » et de lui donner un numéro différent à chaque seconde, quelque chose comme un gestionnaire de téléchargement.

import gtk 
import gtk.glade 
import random 

builder = gtk.Builder() 
builder.add_from_file('ttt.glade') 
window = builder.get_object('window1') 
treeview = builder.get_object('treeview1') 
store = builder.get_object('liststore1') 
column_n = ['File','Size','Speed'] 
rendererText = gtk.CellRendererText() 


for i in range(10): 
    foo = random.randint(100,256) 
    list_ = [('arquivo1.tar.gz', '10MB', '%s k/s' % foo)] 

for x,y in zip(column_n,range(3)): 

    column = gtk.TreeViewColumn(x, rendererText, text=y) 
    column.set_sort_column_id(0)  
    treeview.append_column(column) 


for list_index in list_: 
    store.append([list_index[0],list_index[1],list_index[2]]) 

window.show_all() 

Répondre

2

Si c'est votre code complet, il vous manque l'invocation de la boucle principale GTK.

Vous devez faire deux choses (dans cet ordre)

1 - signal Connectez destroy de la fenêtre à une fonction qui appelle gtk.main_quit()

def on_destroy(widget, user_data=None): 
    # Exit the app 
    gtk.main_quit() 

window.connect('destroy', on_destroy) 

2 - Lancer la boucle principale GTK:

gtk.main() 

Ceci est l'endroit où votre application est effectivement lancée, et elle semblera se bloquer à cette ligne jusqu'à ce que gtk.main_quit() soit appelée.

Plus généralement ... vous devriez nettoyer le code un peu là :) Regardez le "Hello World" demo du PyGTK tutorial - il couvre essentiellement ces points et plus en détail. Vous constaterez que suivre leur structure générale pour les choses aide énormément.

Si vous souhaitez des mises à jour chronométrés, regardez les fonctions timeout_add et timeout_add_seconds - en fonction de votre version de PyGTK/pygobject ceux-ci seront dans les modules glib ou gobject.

(Soit dit en passant, les fichiers XML GtkBuilder ont généralement l'extension .ui, même si Glade ne le sait pas.)

+0

Quand je suis tombé sur la fonction timeout_add dans la programmation PyGTK j'étais un campeur heureux. –

+0

N'oubliez pas de retourner 'False' pour le faire arrêter (bien que ne pas retourner du tout devrait fonctionner, car cela implique' None'). La fonction 'idle_add' est aussi vraiment utile :) – detly

Questions connexes