GTK4 は CenterBox という Widget が追加された。
説明を見ると GTK3 にあった ActionBar みたいなものか。
って ActionBar は GTK4 にも残っているんですけど。
ActionBar の CSS Node には Revealer というものがある。
これは Gtk::Revealer ではなく単純に表示と非表示の切り替えみたい。
Widget::show では何か都合が悪かったのだろうか?
ちなみに HeaderBar と違うのは背景透過であること。
フルスクリーンで使おうとしたけど背景が無くて文字列が読めないんでパス。
対する CenterBox は Widget ベースな単一ノード。
Gtk::Orientable インプリメントなので縦にもできるようだ。
でも縦に並んだ Widget で中心に何か置きたいという状況が思いつかない。
そういえば ButtonBox はとうとう無くなったな。
これの代わりってことかも、試してみよう。
#!/usr/bin/env python3 import gi gi.require_version('Gtk', '4.0') from gi.repository import Gtk class Win(Gtk.ApplicationWindow): ''' GTK4: Sample Code ''' def __init__(self, a): Gtk.ApplicationWindow.__init__(self, application=a, title='GTK4') buttons = [Gtk.Button(label=f'Button{i+1}', hexpand=True) for i in range(6)] # ActionBar bar = Gtk.ActionBar() bar.pack_start(buttons[0]) bar.set_center_widget(buttons[1]) bar.pack_end(buttons[2]) # CenterBox box = Gtk.CenterBox() box.set_start_widget(buttons[3]) box.set_center_widget(buttons[4]) box.set_end_widget(buttons[5]) # vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) vbox.append(bar) vbox.append(box) self.set_child(vbox) self.set_default_size(400, 1) def app_activate(a): w = Win(a) w.present() app = Gtk.Application() app.connect('activate', app_activate) app.run()
hexpand を指定してみたけど、引き伸ばされるのは共にセンターのみ。
ButtonBox のように等間隔に引き伸ばされると思ったけど違っていた。
違うのは ActionBar は挿入した Widget の回りに隙間ができるかどうか、のみ。
HeaderBar のよう Button を置きたいなら ActionBar を。
ステータスバーのように Label を置きたいなら CenterBox を。
という感じか。
まったくベースは違うけどあまり使い道は変わらない。