2017-08-08 64 views
1

我有一個網格包含框架內的一些標籤,使它看起來像一個表。此網格插入垂直框中,其中直接的子標籤正確居中(它們以與網格相同的方式包裝在框中)。如何在一個垂直的Gtk.Box中水平居中一個Gtk.Grid?

我的簡化代碼如下所示:

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水平擴大爲真:

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) 

但是,如果垂直「成長」的窗口,標籤將彼此分開。我建議你使用glade並且​​同時使用擴展和小部件對齊。

結果: result ui