我有一个执行长时间计算的程序,其结果显示为绘图。
我目前正在使用Chart-0.14。我想显示部分结果,并在计算过程中更新。
Graphics.Rendering.Chart.Gtk.updateCanvas :: Renderable a -> DrawingArea -> IO Bool
似乎这样做,但我找不到任何方法从情节中获取DrawingArea。函数renderableToWindow :: Renderable a -> Int -> Int -> IO ()
不会返回任何内容(而且在窗口关闭之前它不会返回)。
我想做以下事情:
main = do
drawingArea = forkRenderableToWindow (toRenderable $ plotLayout $
plot [0,0.1..10] sin "sin(x)") 640 480
updateCanvas (toRenderable $ plotLayout $ plot [0,0.1..10] sin "sin(x)") drawingArea
我该怎么做?我是否需要使用返回Graphics.Rendering.Chart.Gtk
的版本重新实现DrawingArea
中的函数,并以某种方式(我将如何执行此操作?forkIO?)立即返回而不关闭窗口?
答案 0 :(得分:2)
您正在寻找createRenderableWindow
,然后您需要使用GTK操作来处理给定的Window
- 我认为Chart包不会在{{1}上导出任何更高级别的操作}第
EDIT2:所以忽略下面的内容 - 即使使用GUI启动它也不起作用。我的评论是基于类型的猜测。 编辑: 这是一些示例代码。明白了,我只是根据类型将事情拼凑在一起。如果你问一个真正了解图书馆的人,可能会有更好的办法。
下面我们使用:
Window
- 这是我答案的关键createRenderableWindow
- 需要从GTK提供的castToDrawingArea
类型中获取DrawingArea
。我认为这些演员阵容取代了C ++ OO继承。Window
- 因为我们实际上没有显示窗口,所以我们最好这样做。在查看widgetShowAll
。renderableToWindow
- 我刚刚在haddock文档中看到了这一点,并认为这就是为什么你想要updateCanvas
的原因。现在代码:
DrawingArea