у меня есть проблема с treeview liststore пытающийся получить обновление в реальном времени, и я создал пример для моделирования то, что я хотел бы сделать. Я хочу liststore1, обновил каждый цикл.
http://img204.imageshack.us/i/capturadetela5.png/
это должно обновить treeview столбец 'скорость' и давать ему другое число каждую секунду, что-то как менеджер загрузок.
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()
Если это ваш полный код, то вам не хватает вызова главного цикла 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
, хотя Glade его не знает)