冻结更新多个Gtk.Widget

冻结更新多个Gtk.Widget,gtk,drawing,refresh,pygtk,Gtk,Drawing,Refresh,Pygtk,我必须每1秒/0.1秒/0.5秒更新3个Gtk.Label和几个Gtk.DrawingArea,但我不知道为什么软件会在大约10秒后冻结 我尝试了gtk.gdk.threads\u enter/leave或使用锁,但无论如何更新不会同时发生,而是按顺序进行的。(因此没有任何gtk.Widget与多个回调共享) 让我们看看代码: #updating Gtk.DrawingArea for ip in self.__cpu_info.keys(): self.__cpu_info[ip][

我必须每1秒/0.1秒/0.5秒更新3个Gtk.Label和几个Gtk.DrawingArea,但我不知道为什么软件会在大约10秒后冻结

我尝试了gtk.gdk.threads\u enter/leave或使用锁,但无论如何更新不会同时发生,而是按顺序进行的。(因此没有任何gtk.Widget与多个回调共享)

让我们看看代码:

#updating Gtk.DrawingArea
for ip in self.__cpu_info.keys(): 
    self.__cpu_info[ip]['drawing_area'].show()
    self.__cpu_info[ip]['drawing_area'].queue_draw()

#updating Gtk.Label
self.__Media_aritmetica_Label.set_text('%.2f' % self.__cpu_medie['media_aritmetica'])
self.__Media_mobile_Label.set_text('%.2f' % self.__cpu_medie['media_mobile'])
self.__Mediana_Label.set_text('%.2f' % self.__cpu_medie['mediana'])

注意:软件仅使用上述两个部件中的一个部件冻结(因此使用这两个部件冻结所需的时间更少)

您需要使用
GObject.idle\u add
GObject.timeout\u add
将允许您完全摆脱第二个线程)具有修改/访问
GtkWidget
的函数。必须从一(1)个线程调用所有与绘图相关的函数
idle/timeoout\u add
将回调序列化到glib Main循环中,这是您想要的。

请展示一些真实的代码,上面的代码太短了。好的,让我们开始绘制和更新几个Gtk.DrawingArea。请运行以下文件:将您的代码内联到您的问题(代码标记是您的朋友)。此外,由于缺少导入,我还收到许多其他错误。先把那个烂摊子修好。此外,用意大利语命名变量和用意大利语注释也没有任何帮助。包含的2条注释是无用的(因为示例很容易理解)。说到错误,我只得到了很多Pango临界错误和Gtk临界错误;这是由于几个Gtk.标签的更新,这将导致软件终止谢谢,但是。。哦,我的天哪,现在我必须解决这个问题(因此,此时它在两秒钟后停止:错误代码139)
无法注册到辅助功能总线:未收到回复。可能的原因包括:远程应用程序未发送回复、消息总线安全策略阻止了回复、回复超时过期或网络连接中断