2

プロジェクトにGtk2を使用する必要があります。python/rubyを使用します。問題は、パッキングが私には一種の神秘的なように見えることです。VBoxを使用して、ウィンドウに次のウィジェットを(次の順序で)表示できるようにしました。

  • メニューバー
  • ツールバー
  • テキストビュー/エディターコントロール

私は自分のやり方を「推測」してpack_start必要なレイアウトを取得することができましたが、それを理解できるようにしたいと思います。Ruby Gtk2のドキュメントはあまりにも直感的ではないようです(Pythonのドキュメントも同じで、Python専用に書かれているので)、少し光を当てることができますか?

また、 。set_size_requestを使用してコンポーネントを追加すると、常に機能するとは限りませんpack_start。何故ですか ?

4

1 に答える 1

14

箱の梱包はとてもシンプルなので、実際よりも複雑だと想像して、理解できていないのかもしれません。

レイアウトは、垂直 (レンガの山など) または水平 (人の列など) のいずれかです。そのレイアウトの各要素は、展開できる場合とできない場合があります。

水平 (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動作をしません。ウィジェットのサイズは変更されませんが、要求されるスペースの量だけが変更されます。それはより多くを使用する可能性があり、より大きなスペースを埋めるために伸びさえする可能性があります. リクエストよりも小さくなることはめったにありませんが、これも単なる「リクエスト」であるため、リクエストが満たされる保証はありません。

于 2009-03-21T09:29:09.557 に答える