我遇到了一个试图获得实时更新的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()
答案 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_add和timeout_add_seconds - 根据您的PyGTK / PyGobject版本,它们将位于glib
或gobject
模块中
(顺便说一句,GTKBuilder XML文件通常具有.ui
扩展名,即使Glade不知道它。)