python-gtk treeview-liststore和实时更新

python-gtk treeview-liststore和实时更新,python,pygtk,Python,Pygtk,我对treeview liststore试图获得实时更新有一个问题,我创建了一个示例来模拟我想要做的事情。 我希望liststore1更新每个循环 它应该更新treeview列的“速度”,并每秒给它一个不同的数字, 类似于下载管理器的东西 import gtk import gtk.glade import random builder = gtk.Builder() builder.add_from_file('ttt.glade') window = builder.get_object

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

它应该更新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\u quit()的函数

2-启动GTK主回路:

gtk.main()
这是您的应用程序有效启动的地方,在调用
gtk.main_quit()

更一般地说。。。您应该稍微整理一下代码:)从中查看-它基本上涵盖了这些要点,并且更详细。你会发现,遵循他们的一般结构对事情有很大帮助

如果您想要定时更新,请查看函数和-根据您的PyGTK/PyGobject版本,这些函数将位于
glib
gobject
模块中


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

当我在编程PyGTK时偶然发现timeout_add函数时,我非常高兴。别忘了返回
False
使其停止(虽然根本不返回应该可以工作,因为这意味着
None
)。
idle\u add
函数也非常有用:)
gtk.main()