箱の梱包はとてもシンプルなので、実際よりも複雑だと想像して、理解できていないのかもしれません。
レイアウトは、垂直 (レンガの山など) または水平 (人の列など) のいずれかです。そのレイアウトの各要素は、展開できる場合とできない場合があります。
水平 (HBox)
[widget][widget][widget][widget]
垂直 (VBox)
[widget]
[widget]
[widget]
[widget]
たとえば、2 つのボタンを持つ水平レイアウト (HBox) の場合、コードは次のようになります。
import gtk
box = gtk.HBox()
b1 = gtk.Button('button1')
b2 = gtk.Button('button2')
box.pack_start(b1)
box.pack_start(b2)
パッキングのデフォルトは haveexpand=True
であるため、ボックスに追加された両方のボタンが展開され、それぞれ半分の領域を占有します。容器の大きさは問いません。私はこれを「伸縮性」と考えています。
ウィジェットの拡張:
[[ widget ][ widget ]]
したがって、ボタンの 1 つを展開しないようにする場合は、次のようにパックします。
box.pack_start(b1, expand=False)
非拡張ウィジェット:
[[widget][ widget ]]
次に、ボタンはそれ自体を描画するために必要なスペースのみを占有します: テキスト + 境界線 + 影 + 画像 (存在する場合) など。そして、他のボタンは残りの領域を埋めるために拡張されます。通常、ボタンを展開する必要はありません。したがって、より現実的な状況は、ウィンドウを埋めるために展開したい TextArea です。
渡すことができるもう 1 つのパラメーターpack_start
は fill パラメーターで、通常は無視できます。expand=False
ここでは、パラメータが完全に無視されると言うだけで十分ですfill
(その状況では意味がないため)。
あなたが言及した他のことはですset_size_request
。私は一般的に、これは良い考えではないと言います。一般的に言うのは、それを使用する必要がある状況があるからです。しかし、GTK+ ユーザー インターフェイスのパッケージ化を始めた人には、使用しないことを強くお勧めします。一般に、ボックスやその他のコンテナーにレイアウトを処理させます。は、期待どおりのset_size_request
動作をしません。ウィジェットのサイズは変更されませんが、要求されるスペースの量だけが変更されます。それはより多くを使用する可能性があり、より大きなスペースを埋めるために伸びさえする可能性があります. リクエストよりも小さくなることはめったにありませんが、これも単なる「リクエスト」であるため、リクエストが満たされる保証はありません。