图和gtk2hs

时间:2018-07-07 14:38:29

标签: haskell gtk gtk2hs haskell-diagrams

我一直在做我的暑期研究项目,并且一直在使用Diagrams库绘制带有边,节点的图。我正在模拟整个图表中的信息分布,因此我的图表不断地离散更新。我拥有用于​​更新图的状态数据结构,绘制图等的所有基础结构。

出于测试目的,我刚刚使用了带有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,是否可以获得我想要的结果?有没有更清洁的方法可以做到这一点?

如果有人可以向我指出正确的方向,或者提供一些外部阅读,那就太好了。谢谢。

1 个答案:

答案 0 :(得分:0)

您检查了此article吗?我认为这篇文章说明了您正在尝试做的事情。

如果要在单击鼠标时执行某些操作,则可以使用buttonPressEvent代替motionNotifyEvent