python - gtk treeview - 具有实时更新的liststore

时间:2010-06-23 14:22:27

标签: python pygtk

我遇到了一个试图获得实时更新的treeview liststore的问题,我创建了一个示例来模拟我想要做的事情。 我希望每个循环更新liststore1。

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

它应该更新树视图列'speed'并每秒给它一个不同的数字, 像下载管理器一样。

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 个答案:

答案 0 :(得分:2)

如果那是您的完整代码,那么您就错过了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" demo中的PyGTK tutorial - 它基本上涵盖了这些点以及更多细节。你会发现遵循他们的一般结构对事物有很大的帮助。

如果您想要定时更新,请查看函数timeout_addtimeout_add_seconds - 根据您的PyGTK / PyGobject版本,它们将位于glibgobject模块中

(顺便说一句,GTKBuilder XML文件通常具有.ui扩展名,即使Glade不知道它。)