图表和gtk2hs
Diagrams and gtk2hs
我一直在做我的暑期研究项目,我一直在使用 Diagrams 库来绘制带有边、节点的图形。我正在模拟信息在整个图表中的传播,因此我的图表会不断更新。我拥有更新图的状态数据结构、绘制图表等的所有基础设施。
出于测试目的,我一直在使用带有 getLine
反馈循环的 SVG 后端,更新图表,然后将其呈现为相同的“.svg”文件。这显然是很劣质的,并且依赖于我的 .svg 查看器在文件更新时更新的事实。
我研究过为此使用 GTK 后端,因此我可以将图表渲染为 GTK window 中的 drawingArea
。我已经安装了所有这些,并且一直在摆弄一些小程序。
但是我想不出如何实施我的程序。我看过很多关于如何在 GTK window 中绘制图表的示例,但其中 none 似乎包括基于按钮按下或什至来自命令的某些内容来更新该图像线。
我听说过一些关于 GTK 的多线程。我正在考虑编写如下函数:
renderDiagram :: DrawingArea -> Diagram B -> IO ()
renderDiagram c d = do
c `on` exposeEvent $ do
liftIO (defaultRender c d)
return True
widgetQueueDraw c
更改 canvas 公开时呈现的图表,然后强制公开事件。如果我然后 运行 我的主程序执行更新图形,并且 运行 在单独的线程上 renderDiagram
到 mainGUI
,我会得到我想要的结果吗?有更简洁的方法吗?
如果有人能给我指出正确的方向,或者提供一些外部阅读材料,那就太好了。谢谢。
你检查过这个article了吗?我认为这篇文章正好解释了您正在尝试做的事情。
如果您想在鼠标点击时执行某些操作,您可以使用 buttonPressEvent
而不是 motionNotifyEvent
。
我一直在做我的暑期研究项目,我一直在使用 Diagrams 库来绘制带有边、节点的图形。我正在模拟信息在整个图表中的传播,因此我的图表会不断更新。我拥有更新图的状态数据结构、绘制图表等的所有基础设施。
出于测试目的,我一直在使用带有 getLine
反馈循环的 SVG 后端,更新图表,然后将其呈现为相同的“.svg”文件。这显然是很劣质的,并且依赖于我的 .svg 查看器在文件更新时更新的事实。
我研究过为此使用 GTK 后端,因此我可以将图表渲染为 GTK window 中的 drawingArea
。我已经安装了所有这些,并且一直在摆弄一些小程序。
但是我想不出如何实施我的程序。我看过很多关于如何在 GTK window 中绘制图表的示例,但其中 none 似乎包括基于按钮按下或什至来自命令的某些内容来更新该图像线。
我听说过一些关于 GTK 的多线程。我正在考虑编写如下函数:
renderDiagram :: DrawingArea -> Diagram B -> IO ()
renderDiagram c d = do
c `on` exposeEvent $ do
liftIO (defaultRender c d)
return True
widgetQueueDraw c
更改 canvas 公开时呈现的图表,然后强制公开事件。如果我然后 运行 我的主程序执行更新图形,并且 运行 在单独的线程上 renderDiagram
到 mainGUI
,我会得到我想要的结果吗?有更简洁的方法吗?
如果有人能给我指出正确的方向,或者提供一些外部阅读材料,那就太好了。谢谢。
你检查过这个article了吗?我认为这篇文章正好解释了您正在尝试做的事情。
如果您想在鼠标点击时执行某些操作,您可以使用 buttonPressEvent
而不是 motionNotifyEvent
。