質問

プロジェクトに Gtk2 を使用する必要があります。これにはPython/Rubyを使用します。問題は、私にとって梱包がなんだか神秘的に思えることです。VBox を使用して、ウィンドウに次のウィジェットを (次の順序で) 表示できるようにしてみました。

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

私はなんとか自分のやり方を「推測」することができました pack_start 必要なレイアウトを取得したいのですが、それを理解できるようになりたいと思っています。ドキュメントは次のとおりです。 ルビーGtk2 これはあまりにも直感的ではないように思えます (Python のものも同様です。Python 用にのみ書かれたものと同じです)。少し説明してもらえますか?

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

役に立ちましたか?

解決

ボックスパッキングはあなたはあるよりも複雑であると想像するので、<全角>本当にのシンプルなので、おそらくそれを理解するために、あなたの障害があるです。

レイアウトは縦または横(レンガの山のような)(人の待ち行列のような)のいずれかです。そのレイアウト内の各要素は、展開することができますまたはそれが拡張することはできません。

水平(HBoxの)

[widget][widget][widget][widget]

垂直(VBoxの)

[widget]
[widget]
[widget]
[widget]

例えばだから、横長レイアウト(HBoxの)コードがあろう2つのボタンと

import gtk
box = gtk.HBox()
b1 = gtk.Button('button1')
b2 = gtk.Button('button2')
box.pack_start(b1)
box.pack_start(b2)
梱包のデフォルトはexpand=Trueを持つことがあるので、

さて、ボックスに追加両方のこれらのボタンは拡大すると、彼らはそれぞれの半分の面積を占めることになります。どんなにコンテナのサイズが何でありますか。私は、「伸縮性」と考える。

ウィジェットを拡大ます:

[[    widget    ][    widget    ]]

あなたが拡大しないようにボタンのいずれかをしたいのであれば、あなたはこのようにそれをパックします:

box.pack_start(b1, expand=False)

非拡大ウィジェットます:

[[widget][        widget        ]]

次にボタンは、それ自身が描画する必要があるスペースを占有します:テキスト+ボーダー+影+画像(もしあれば)などと他のボタンは、残りの領域を埋めるために拡大していきます。通常、ボタンが拡大する必要がないので、より現実の状況はあなたが窓を埋めるために拡大したいと思うのTextAreaです。

pack_startに渡すことができ、他のパラメータは、充填パラメータであり、通常はこれを無視することができます。 (それはそのような状況では意味がないので)それはexpand=Falseその後fillパラメータは完全に無視されている場合と言うことは、ここで十分です。

あなたが言及した他の事はset_size_requestです。私は一般的に、これは良いアイデアではないと言うでしょう。あなたがそれを使用する必要があります状況があるので、私は、一般的に言います。しかし、誰かがGTK +のユーザーインターフェイスを梱包して始まるために、私は強く、それを使用しないことをお勧めします。一般的には、ボックスや他のコンテナがあなたのためにレイアウトを処理しましょう。 set_size_requestは、あなたがそれを行うことを期待する正確に何をしません。これは、ウィジェットのサイズを変更しませんが、単にそれが要求されますどのくらいのスペース。それは、より使用することができ、そしてさらに大きなスペースを埋めるためにストレッチがあります。それだけで「要求」の要求が満たされますtheat保証がないですので、それはめったになく、再び、要求よりも小さくなっていないでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top