2009-03-20 10 views
2

私はプロジェクトにGtk2を使う必要があります。私はpython/ruby​​を使っています。問題は、パッキングが私にとって神秘的なように思えることです。私は(次の順序で)私の窓には、以下のウィジェットを持つことができるように、私はVBoxのを使用してみました:誰かがGtk2の梱包について説明できますか?

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

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

また、pack_startのコンポーネントを追加すると、set_size_requestが正常に機能しない場合があります。何故ですか ?

+0

言語固有のGTK +ドキュメントのことを理解するのに問題がある人は、[developer.gnome.org](https://developer.gnome.org)の各機能を完全に説明するプライマリCドキュメントを使用することを強くお勧めします。 – oldtechaa

答えて

14

箱詰めはとなります。実際はという単純なものなので、理解していないのはおそらくそれがもっと複​​雑だと思うからです。

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

import gtk 
box = gtk.HBox() 
b1 = gtk.Button('button1') 
b2 = gtk.Button('button2') 
box.pack_start(b1) 
box.pack_start(b2) 
:コードは、あろう2つのボタンを有する

横長(HBoxの)

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

垂直(のVBox)

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

したがって例えば、横長レイアウト(HBoxの)

デフォルトの梱包にはexpand=Trueが含まれているので、これらのボタンは両方ともボックスに追加されたものは拡大し、それぞれ面積の半分を占めます。容器の大きさに関係なく私はこれを「ストレッチ」と考えています。

box.pack_start(b1, expand=False) 

非拡大ウィジェット::

[[widget][  widget  ]] 
あなたがいずれかのボタンが拡大しないようにしたい場合、あなたはこのようにそれをパックします、だから、

[[ widget ][ widget ]] 

:ウィジェットを拡大

ボタンは、それ自身描画する必要がある領域(テキスト+枠+シャドウ+画像)(存在する場合)を占有します。残りの領域を埋めるためにもう一方のボタンが展開されます。通常は、ボタンを展開する必要はありません。そのため、実際の状況は、ウィンドウを埋めるために展開したいTextAreaです。

pack_startに渡すことができる他のパラメータは、fillパラメータです。これは通常無視できます。 expand=Falseの場合は、fillのパラメータは完全に無視されます(その状況で意味をなさないため)。

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

関連する問題