Gtk gobject.timeout_add()回调从另一个线程获取数据

时间:2016-12-23 17:25:49

标签: python multithreading gtk

我不熟悉Gtk编程,我正在尝试修改一些existing code,以便gobject.timeout_add()回调函数可以使用来自另一个线程的数据。

现有代码通过定期读取文件来创建用于显示DOT图形的GUI,但我希望从可以从订户获得的字符串中读取DOT数据,如下所示:

import rospy
from std_msgs.msg import String
rospy.Subscriber('/dot_string', String, self.update_dot_graph)

def update_dot_graph(self, msg)
    self.dot_string = msg.data

rospy.Subscriber在自己的线程中运行,因此当Gtk.main()函数阻止任何其他代码运行时,我不清楚如何访问self.dot_string。

现有的GUI代码为gobject.timeout_add()定义了以下回调:

def update(self):
    if self.openfilename is not None:
        current_mtime = os.stat(self.openfilename).st_mtime
        if current_mtime != self.last_mtime:
            self.last_mtime = current_mtime
            self.reload()
    return True

在这里您可以看到,如果DOT代码自上次读取后已更改,则会从文件中读取,然后重新加载GUI窗口。我想改为使用另一个线程的self.dot_string中的数据来在这个更新函数中使用。或者,我想直接在附加到另一个线程的update_dot_graph()回调中触发数据更新和reload()。

如果需要更多详细信息,请告诉我。

0 个答案:

没有答案