python - gtk treeview - listtore с обновлением в реальном времени - PullRequest
1 голос
/ 23 июня 2010

У меня проблема с хранилищем древовидных списков при попытке обновления в режиме реального времени, и я создал пример для имитации того, что я хотел бы сделать.Я хочу, чтобы liststore1 обновлял каждый цикл.

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

он должен обновлять столбец древовидной структуры «скорость» и давать ему другое число каждую секунду, что-то вроде менеджера загрузки.

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()

1 Ответ

2 голосов
/ 23 июня 2010

Если это ваш полный код, вы пропускаете вызов основного цикла GTK.

Вам нужно сделать две вещи (в этом порядке)

1 - подключить destroy вашего окнасигнал функции, которая вызывает gtk.main_quit()

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

window.connect('destroy', on_destroy)

2 - Запустите основной цикл GTK:

gtk.main()

Это место, где ваше приложение эффективно запускается, и оно будет зависатьв этой строке до тех пор, пока не будет вызван gtk.main_quit().

В более общем смысле ... вам следует немного очистить код :) Посмотрите на "Hello World" демо из PyGTK tutorial - он в основном охватывает эти моменты и более подробно.Вы обнаружите, что следование их общей структуре вещей очень помогает.

Если вы хотите обновления по времени, посмотрите на функции timeout_add и timeout_add_seconds - в зависимости от вашей версииPyGTK / PyGobject они будут в модулях glib или gobject.

(Кстати, XML-файлы GTKBuilder обычно имеют расширение .ui, даже если Глейд не знает его.)

...