gpt4 book ai didi

haskell - 在 Haskell 中动态更新绘图

转载 作者:行者123 更新时间:2023-12-02 15:46:25 25 4
gpt4 key购买 nike

我有一个程序,它执行长期计算,结果显示为绘图。我目前正在使用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

我应该怎么做?我是否需要使用返回 DrawingArea 的版本以及以某种方式重新实现 Graphics.Rendering.Chart.Gtk 中的函数(我该怎么做?forkIO?)不关闭窗口就立即返回?

最佳答案

您正在寻找createRenderableWindow然后您需要使用 GTK 操作来处理给定的 Window - 我认为 Chart 包不会在 Window 上导出任何更高级别的操作。

EDIT2:所以忽略下面的内容 - 即使 GUI 初始化它也不起作用。我的评论是基于类型的猜测。编辑:这是一些示例代码。请理解,我只是根据类型将事物拼凑在一起。如果您询问真正了解该库的人,可能会有更好的方法。

下面我们使用:

  1. createRenderableWindow - 这是我答案的关键
  2. castToDrawingArea - 这是从 GTK 提供的 Window 类型获取 DrawingArea 所必需的。我认为这些转换正在取代 C++ OO 继承。
  3. widgetShowAll - 因为我们还没有实际显示窗口,所以我们最好这样做。我在查看了 renderableToWindow 的源代码后窃取了这个函数。
  4. updateCanvas - 我刚刚在 haddock 文档中看到了这一点,并认为这就是您首先想要 DrawingArea 的原因。

现在是代码:

import Graphics.Rendering.Chart.Gtk
import Graphics.Rendering.Chart.Renderable
import Graphics.UI.Gtk.Misc.DrawingArea
import qualified Graphics.UI.Gtk as G

main = do
win <- createRenderableWindow emptyRenderable 400 400
let draw = castToDrawingArea win
G.widgetShowAll win
updateCanvas emptyRenderable draw

关于haskell - 在 Haskell 中动态更新绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7625695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com