2017-08-08 27 views
1

フレームの中にいくつかのラベルが入っているグリッドをテーブルのように見せています。このグリッドは、直接子ラベルが正しく中央揃えされた垂直ボックスに挿入されます(グリッドと同じ方法でボックスにパックされます)。Gtk.Boxを縦方向のGtk.Boxの中に水平に配置する方法は?

私の単純化したコードはこれです:

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk 

window = Gtk.Window() 

g = Gtk.Grid() # this should be in the horizontal center of the window 
g.attach(Gtk.Label("This should be centered but it is not."), 0, 0, 1, 1) 

b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) 
b.pack_start(g, True, False, 0) # The same behavior with: b.pack_start(g, True, True, 0) 
b.pack_start(Gtk.Label("This label is centered as it should be. Try to resize the window."), True, False, 0) 

window.add(b) 

window.connect("delete-event", Gtk.main_quit) 
window.show_all() 
Gtk.main() 

、これは、それが生成するGUIである:

Screenshot of the code example.

答えて

1

をあなたはアライメントを使用して、子コンテナの振る舞いを設定するためのプロパティ/メソッドを展開しなければなりません。

Gtk.Boxでは、両方の子に対してTrueとFalseを指定して拡張を定義しましたが、最初はコンテナGtk.Gridです。グリッドにラベルを追加したとき、展開フラグまたは塗りつぶしフラグは設定されませんでした。

ウィンドウのサイズを変更するときにラベルがどのように動作するかわからないが、Gtk.Grid内のラベルを水平にセンタリングするようにするには、Gtk.Labelの水平展開をtrueに設定するか、Gtkを設定します。中心のグリッドアライメント

例 - 設定Gtk.Labelの横には、Trueとして展開します。

g = Gtk.Grid() # this should be in the horizontal center of the window 
l = Gtk.Label("This should be centered but it is not.") 
l.set_hexpand(True) 
g.attach(l, 0, 0, 1, 1) 

をしかし、あなたはウィンドウを垂直方向に「成長」場合、ラベルは互いに分離されます。私はあなたが隙間を使用して、拡大とウィジェットの両方の配置で遊ぶことをお勧めします。

結果: result ui

関連する問題