Sizers

サイザー

サイザー( wxSizer のサブクラス)はウィンドウまたはフレームでエレメントの見た目の編集を
取り扱うために使用します。サイザーは次のようなことをします。

  • 各可視要素に対する適切なサイズを計算します。
  • ある規則に沿って要素を配置します。
  • フレームがリサイズされたときに動的に要素のリサイズ、再配置を行います。

より一般的な種類のサイザーには次のようなものがあります

  • wxBoxSizer, 可視要素を垂直または水平に配置します。
  • wxGridSizer, 可視要素を格子状に配置します。
  • wxFlexGridSizer, wxGridSizer をより柔軟にしたサイザーです。

サイザーには、Add(window, options...) または AddMany(...) の呼び出しによって
wxWindow オブジェクトのリストが与えられます。
サイザーは与えられた要素に対してのみ働きます。
サイザーは入れ子にすることができます。
たとえばボタンが水平に配置された二つの wxBoxSizer を別の垂直な wxBoxSizer に
配置するなどのようにできます。

Add メソッドは三つの引数を取ります。
最初のものはサイザーで扱うコントロールを指定します。
二つ目は重みで、これは他のコントロールとのサイズの割合を意味します。
たとえば3つのエディットコントロールがあり、このサイズを 3:2:1 の割合にしたいときに
引数を指定します。 0 を指定すると追加するコントロールは拡大されません。
三つ目は通常 wxGROW ( wxEXPAND も同じ意味) で、必要であればコントロールがリサイズされます。
代わりに wxSHAPED を指定した場合、コントロールアスペクト比が保存されます。

もし二つ目のパラメータが 0 で、コントロールがリサイズされない状態であれば、
三つ目のパラメータに wxGROW または wxSHAPED の代わりに wxALIGN_CENTER_HORIZONTA,
wxALIGN_CENTER_VERTICAL, wxALIGN_CENTER を使うことで水平方向と垂直方向で
センタリングされます。

wxALIGN_LEFT, wxALIGN_TOP, wxALIGN_RIGHT, wxALIGN_BOTTOM の組み合わせを使用することもできます。
デフォルトの振る舞いは、wxALIGN_LEFT | wxALIGN_TOP を指定した場合の配置になります。

サイザーの潜在的な混乱を招く局面は、サイザーと親ウィンドウの区別です。
オブジェクトをサイザーに渡しても、サイザーはオブジェクトの親ウィンドウにはなりません。
サイザーはウィンドウを配置する手段で、ウィンドウそのものではありません。
上記の例で六つのボタンの親はサイザーではなく一番近いフレームかウィンドウになります。
可視要素を作成して、その親としてサイザーを渡せば、プログラムはクラッシュするでしょう。

可視要素を作成してサイザーに追加したら、次のステップはフレームまたはウィンドウにサイザーを
使用することを伝えることです。これは三つのステップで実現します。

# SetSizer() の呼び出しはウィンドウに使用するサイザーを伝えます。
window.SetSizer(sizer)
# SetAutoLayout() はコンポーネントの配置とサイズ設定にサイザーを使うことを伝えます。
window.SetAutoLayout(true)
# 最後に sizer.Fit() はサイザーに全ての要素の初期配置を計算するように伝えます。
sizer.Fit(window)

サイザーを使用するならば、これは最初に表示するより前にウィンドウを設定するために通して行う
通常のプロセスです。

      • -

サイザーは Tkinter の配置と似たようなもののようです。