2010-06-23 33 views
1

我有一個treeview liststore試圖獲得實時更新的問題,並且我創建了一個示例來模擬我想要做的事情。 我希望liststore1更新每個循環。python - gtk treeview - 實時更新列表庫

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

回答

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

更一般地說...你應該清理一下代碼:)看看PyGTK tutorial"Hello World" demo--它基本上覆蓋了這些點,更詳細的內容。你會發現,遵循它們的一般結構是非常有用的。

如果想定時更新,看看功能timeout_addtimeout_add_seconds - 這取決於你的版本的PyGTK/PyGobject這些將在glibgobject模塊。

(順便說一句,GTKBuilder XML文件通常具有.ui擴展,即使格萊德不知道它。)

+0

當我偶然發現了timeout_add函數編程的PyGTK我是一個快樂的人。 – 2010-06-23 15:44:58

+0

不要忘記返回'False'使其停止(儘管不返回應該工作,因爲這意味着'None')。 'idle_add'函數也非常有用:) – detly 2010-06-23 15:56:53