我必须每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'])
注意:::该软件仅冻结上述2个组件中的一个(因此,使用这两个组件冻结所需的时间更少)
您需要使用GObject.idle_add
(GObject.timeout_add
修改/访问的)函数(可以让您完全摆脱第二个线程)GtkWidget
。必须使用一(1)个线程来调用对图形相关功能的所有访问权限!idle/timeoout_add
确实将回调序列化到glib mainloop中,这是您想要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句