我一直在从事我的暑期研究项目,我一直在使用图表库绘制边、节点的图表。我是在模拟信息在整个图中的传播,所以我的图表一直在谨慎地更新。我有更新图形状态数据结构、绘制图表等的所有基础设施。
出于测试目的,我刚刚使用了带有getLine反馈循环的SVG后端,更新了图表,然后将其呈现到相同的'.svg‘文件中。这显然很糟糕,并且依赖于我的.svg查看器在文件更新时更新的事实。
我已经研究过如何使用GTK后端,因此我只需将图表呈现给GTK窗口中的drawingArea即可。我已经安装了所有这些,并且一直在乱搞一些小程序。
然而,我无法思考如何实现我的程序。我已经看到了一些如何在GTK窗口中绘制图表的例子,但似乎没有一个例子包括基于按钮按下的图像更新,甚至是命令行中的一些内容。
我听说过一些关于使用GTK进行多线程处理的消息。我正在考虑写一个函数,比如:
renderDiagram :: DrawingArea -> Diagram B -> IO ()
renderDiagram c d = do
c `on` exposeEvent $ do
liftIO (defaultRender c d)
return True
widgetQueueDraw c若要更改画布公开时呈现的关系图,请执行强制公开事件。如果我然后运行我的主程序执行更新图形,并在一个单独的线程上运行renderDiagram到mainGUI,我会得到我想要的结果吗?有更干净的方法吗?
如果有人能指出正确的方向,或提供一些外部阅读,那就太好了。谢谢。
发布于 2018-07-07 15:05:51
你查过这个文章了吗?我想这篇文章正好解释了你想做什么。
如果你想在鼠标点击时做些什么,你可以使用buttonPressEvent而不是motionNotifyEvent。
https://stackoverflow.com/questions/51224195
复制相似问题