我的系统是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
我在任务栏中看到一个新窗口会聚焦,然后在没有任何窗口的情况下消失。
答案 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