Python GTK3-树视图未正确更新
我对GTK的TreeView和ListStore有意见。记录会更新,但有时只有在我将其悬停时才会更新。 更大的问题是新记录——就像它停止显示新记录,除非我一直滚动到底部——这很奇怪 我使用林间空地。 我的代码(稍微简化) self.module中创建的线程(最多30个线程同时运行)调用self.url_pending和self.url_update方法 我检查并将新记录正确附加到ListStore中-我可以从中读取数据。窗口工作正常,但底部没有新项目Python GTK3-树视图未正确更新,python,multithreading,treeview,gtk3,Python,Multithreading,Treeview,Gtk3,我对GTK的TreeView和ListStore有意见。记录会更新,但有时只有在我将其悬停时才会更新。 更大的问题是新记录——就像它停止显示新记录,除非我一直滚动到底部——这很奇怪 我使用林间空地。 我的代码(稍微简化) self.module中创建的线程(最多30个线程同时运行)调用self.url_pending和self.url_update方法 我检查并将新记录正确附加到ListStore中-我可以从中读取数据。窗口工作正常,但底部没有新项目 想法?好的,我做了研究,发现GTK不喜欢从主
想法?好的,我做了研究,发现GTK不喜欢从主线程外部调用 Gdk中有一些方法可以锁定GTK调用
Gtk.threads_enter()
...
Gtk.threads_leave()
但现在它已经被弃用了,GTK文档说每个GTK调用都应该在主线程中
我的解决方法:
# [...]
def start(self):
# [...]
GObject.timeout_add(100, self.query_do)
# [...]
def query_do(self):
while len(self.gtk_calls):
self.gtk_calls.pop()()
GObject.timeout_add(100, self.query_do)
我只是把它添加到查询中
self.gtk_calls.insert(0, lambda: anything())
代码不像以前那么清晰,但是工作得很完美。好的,我做了研究,发现GTK不喜欢从主线程外部调用 Gdk中有一些方法可以锁定GTK调用
Gtk.threads_enter()
...
Gtk.threads_leave()
但现在它已经被弃用了,GTK文档说每个GTK调用都应该在主线程中
我的解决方法:
# [...]
def start(self):
# [...]
GObject.timeout_add(100, self.query_do)
# [...]
def query_do(self):
while len(self.gtk_calls):
self.gtk_calls.pop()()
GObject.timeout_add(100, self.query_do)
我只是把它添加到查询中
self.gtk_calls.insert(0, lambda: anything())
代码不像以前那么清晰,但工作起来很完美。您可能应该使用而不是GObject.timeout\u add
,否则这是正确的想法。您可能应该使用而不是GObject.timeout\u add
,否则这是正确的想法。