实时更新树视图
Update treeview in real time
这是我正在尝试的树视图。
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]))
问题是,我希望它为最后一个 i
循环的每次迭代附加树视图,如:
self.cr_liststore.append(list(api_tups[2:6]))
在 i
循环中。
但实际上,crrefwin
仅在 i
循环完成后出现。
我做错了什么?
问题很可能是您在 Gtk 的主循环中执行此操作,该循环还处理显示您的项目。为了解决这个问题,Gtk 主循环应该有机会渲染东西。
您很可能可以通过在 for i
循环中包含以下 while
来实现:
while Gtk.events_pending():
Gtk.main_iteration_do(False)
这个 while 循环基本上检查 Gtk 是否有待处理的东西(比如绘制你的追加)并循环直到没有其他待处理的东西。
这是我正在尝试的树视图。
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]))
问题是,我希望它为最后一个 i
循环的每次迭代附加树视图,如:
self.cr_liststore.append(list(api_tups[2:6]))
在 i
循环中。
但实际上,crrefwin
仅在 i
循环完成后出现。
我做错了什么?
问题很可能是您在 Gtk 的主循环中执行此操作,该循环还处理显示您的项目。为了解决这个问题,Gtk 主循环应该有机会渲染东西。
您很可能可以通过在 for i
循环中包含以下 while
来实现:
while Gtk.events_pending():
Gtk.main_iteration_do(False)
这个 while 循环基本上检查 Gtk 是否有待处理的东西(比如绘制你的追加)并循环直到没有其他待处理的东西。