我不熟悉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()。
如果需要更多详细信息,请告诉我。