冻结更新多个Gtk.Widget

时间:2014-07-19 01:07:47

标签: gtk drawing refresh pygtk

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

我尝试了 gtk.gdk.threads_enter / leave 或使用 lock ,但无论如何更新并非同时发生,但是相反它是顺序的。(所以没有任何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'])

注意:: 软件冻结只有上面两件中的一件(因此两者都需要更少的时间来冻结)

1 个答案:

答案 0 :(得分:0)

您需要使用GObject.idle_addGObject.timeout_add允许您完全摆脱第二个线程)使用修改/访问GtkWidget的函数。必须从一(1)个线程调用对绘图相关函数的所有访问! idle/timeoout_add将回调序列化为glib mainloop,这就是你想要的。