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 を。
という感じか。
まったくベースは違うけどあまり使い道は変わらない。








