2016-07-26 9 views
1

Это дерево, которое я пытаюсь.Обновление treeview в реальном времени

def search_cr(self): 
    headers = {'Accept': 'application/x-bibtex; charset=utf-8'} 
    jsonget=(urlopen(http://api.crossref.org/works?query.author=Albert+Einstein)) 
    data = (json.loads(jsonget.read().decode())) 

    # First, open a window to dispaly data 
    self.crrefwin = Gtk.Window() 
    self.crrefwin.set_title("Showing search result from CrossRef") 
    self.crrefwin.set_default_size(950, 350) 
    grid = Gtk.Grid() 
    self.cr_liststore = Gtk.ListStore(str, str, str, str) 
    self.treeview = Gtk.TreeView(model=self.cr_liststore) 

    for i, column_title in enumerate(["Title", "Author", "Journal", "Year"]): 
     renderer = Gtk.CellRendererText() 
     column = Gtk.TreeViewColumn(column_title, renderer, text=i) 
     self.treeview.append_column(column) 

    self.scrolw = Gtk.ScrolledWindow() 
    grid.attach(self.scrolw, 0, 0, 1, 1) 
    self.scrolw.add(self.treeview) 
    self.crrefwin.add(grid) 
    self.crrefwin.show_all() 
    #This completes `self.crrefwin`. Why it is not created here? 

    # Fetching data and updating to cr_liststore 
    for i in range(len(data["message"]["items"][0])): 
     url=((data["message"]["items"][i]["URL"])) 
     r = requests.get(url, headers=headers) 
     r.encoding = "utf-8" 
     api_tups = self.Parser.parsing_read(io.StringIO(r.text.strip())) 
     self.cr_liststore.append(list(api_tups[2:6])) 

Проблема заключается в том, я ожидаю его для добавления TreeView для каждой итерации последнего i цикла, как:

self.cr_liststore.append(list(api_tups[2:6])) 

находится внутри этого i цикла.

Но в действительности, crrefwin появляется только после того, как цикл i будет выполнен.

Что я здесь делаю неправильно?

ответ

2

Проблема, скорее всего, в том, что вы делаете это в основном цикле Gtk, который также имеет дело с показом ваших предметов. Чтобы исправить это, основной цикл Gtk должен получить возможность визуализировать вещи.

Скорее всего, вы можете achive, что, включив в for i петлю следующей while:

while Gtk.events_pending(): 
    Gtk.main_iteration_do(False) 

Этот маленький в то время как цикл в основном проверяет, имеет ли Gtk-то отложенный (как рисунок вашего Append) и петли, пока там нет ничего еще не ожидается.

Смежные вопросы