ErlangでGUI(3) 〜レイアウト〜

30分プログラム、その533。ErlangGUIをやってみよう、レイアウト編。

packerというwidgetを使うとレイアウトを制御できるらしいので、やってみた。X方向とY方向の重みを設定してpackerをつくったあと、そこにボタンなどを配置していく。なんとなくJavaのGridBagLayoutに似ている気がする。

使い方

1> gui_pack:init().

ソースコード

-module(gui_pack).
-compile([export_all]).

times(N,X) ->
    [X || _ <- lists:seq(1,N)].

init() ->
    Top = gs:start(),
    Win = gs:create(window,Top,[{width,200},{height,200},{map,true}]),
    gs:frame(frame,Win,[{packer_x,times(3,{stretch,1})},
			{packer_y,times(3,{stretch,1})}]),
    [
     gs:button(frame,[{label,{text,io_lib:format("~p",[X+(Y-1)*3])}},{pack_xy,{X,Y}}]) ||
	X <- lists:seq(1,3),
	Y <- lists:seq(1,3)
    ],
    gs:config(frame,[{width,200},{height,200}]),
    loop().

loop() ->
    receive
	{gs,_,destroy,_,_} ->
	    ok
    end.