在显示窗口之前关闭的简单ocaml图形程序

时间:2016-03-28 13:13:39

标签: graphics ocaml

我的系统是ArchLinux

我有这个简单的ocaml程序,应该创建一个窗口并使用绘图基元。

open Graphics

let _ =
  open_graph "";
  set_window_title "Graphics example";
  draw_rect 50 50 300 200;
  set_color red;
  fill_rect 50 50 300 200;
  set_color blue;
  draw_rect 100 100 200 100;
  fill_rect 100 100 200 100

我可以编译它:

ocamlc graphics.cma -o graphics_exple graphics_exple.ml 

然后启动它:

./graphics_exple

我在任务栏中看到一个新窗口会聚焦,然后在没有任何窗口的情况下消失。

2 个答案:

答案 0 :(得分:2)

这里的问题是你的程序执行一系列命令,一旦完成,它就会退出。当它退出时,它会关闭与之关联的窗口。如果您希望窗口保持打开状态,则需要阻止程序退出。

一种可能的解决方案是使用Unix的{​​{1}}通过在程序结束时添加sleep来保持窗口打开,例如5秒用命令编译它:

Unix.sleep 5

另一个选择是通过在上一个ocamlc graphics.cma unix.cma -o graphics_exple graphics_exple.ml 之后插入一个loop ()来简单地输入一个无限循环。其中fill_rect的定义如下:

loop

最后,您可以让一个处理程序等待来自用户的输入并对其进行操作。为了论证,假设你想在控制台中打印除用let rec loop () = loop () 以外的所有用户输入的字符,这使得程序退出。您只需在脚本末尾插入'q' interactive ()定义为:

interactive

答案 1 :(得分:1)

所有桌面图形(如Tcl / Tk或GTK)都必须输入一个事件循环,以便系统有时间执行和显示。

您可以使用

Thread.delay 10.0

等。

我建议像这样使用ocamlfind进行编译,graphtemp.ml是你的测试文件:

ocamlfind ocamlc -o graphtemp -thread -package graphics -linkpkg graphtemp.ml