Python GTK3-树视图未正确更新

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的TreeView和ListStore有意见。记录会更新,但有时只有在我将其悬停时才会更新。 更大的问题是新记录——就像它停止显示新记录,除非我一直滚动到底部——这很奇怪

我使用林间空地。 我的代码(稍微简化)

self.module中创建的线程(最多30个线程同时运行)调用self.url_pending和self.url_update方法

我检查并将新记录正确附加到ListStore中-我可以从中读取数据。窗口工作正常,但底部没有新项目


想法?

好的,我做了研究,发现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
,否则这是正确的想法。