Gedit のステータスバーにあるみたいなちっちゃいボタンが使いたい。
タッチパネルを考えると時代に逆行ですけど。
主に確認用として表示させボタンは補助目的としてならアリかと。
実際 Gedit でもこのボタンを使っている人は少ないだろうし。
普通に GtkButton を作ると当然隙間が多く小さくはならない。
#!/usr/bin/env python3
from gi.repository import Gtk
class Win(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.connect("delete-event", Gtk.main_quit)
vbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
for s in "ABC":
button = Gtk.Button.new_with_label(s*10)
vbox.pack_start(button, False, False, 0)
self.add(vbox)
self.show_all()
Win()
Gtk.main()
どうやっているか調べると CSS を使っていた。
Style プロパティの border と padding の値を全部ゼロにすればいいらしい。
ようするに HTML の CSS と同様。
GtkButton はコレしか使わないなら直接 CSS 指定すればいい。
しかしこういう部品は GtkButton のサブクラスを作ったほうが使い易い。
ので gtype を指定した class を作ってこんな感じにすると便利。
#!/usr/bin/env python3
from gi.repository import Gtk
style = """
MiniButton {
-GtkButton-default-border : 0;
-GtkButton-default-outside-border : 0;
-GtkButton-inner-border: 0;
-GtkWidget-focus-line-width : 0;
-GtkWidget-focus-padding : 0;
padding: 0;
}"""
class MiniButton(Gtk.Button):
__gtype_name__ = "MiniButton"
def __init__(self, label):
Gtk.Button.__init__(self, label=label)
# css
provider = Gtk.CssProvider()
provider.load_from_data(style.encode("utf-8"))
context = self.get_style_context()
context.add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
#self.set_relief(Gtk.ReliefStyle.NONE)
class MiniButtonWin(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.connect("delete-event", Gtk.main_quit)
vbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
for s in "ABC":
button = MiniButton(s*10)
vbox.pack_start(button, False, False, 0)
self.add(vbox)
self.show_all()
MiniButtonWin()
Gtk.main()
こんなにちっちゃくなりました。
css の指定で Widget のサイズも変わるんだね、これは面白い。

