使PyGObject中的特定按钮尽可能小

问题描述 投票:0回答:1

我想有一个带有标签的工具栏按钮,但没有尽可能小的图标。按钮上的文本和按钮的边框之间不需要边距。它不一定是真正的工具栏。它也可以是一个简单的水平线按钮。

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk


class MyWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect('destroy', Gtk.main_quit)

        # try it as a toolbar
        toolbar = Gtk.Toolbar()
        for i in range(3):
            widget = Gtk.Label(str(i), expand=False)
            #widget.set_margin_start(0)
            btn = Gtk.ToolButton.new()
            btn.set_label_widget(widget)
            toolbar.insert(btn, -1)

        # try it as simple button line
        hbox = Gtk.HBox()
        for i in range(5):
            btn = Gtk.Button(label=str(i), expand=False, relief=2)
            hbox.pack_start(btn, expand=False, fill=False, padding=0)

        # layout
        vbox = Gtk.VBox()
        vbox.pack_start(toolbar, expand=False, fill=False, padding=0)
        vbox.pack_start(hbox, expand=False, fill=False, padding=0)
        self.add(vbox)


if __name__ == '__main__':
    window = MyWindow()
    window.show_all()
    Gtk.main()

编辑:应用程序中的所有按钮都不应该是这样的。我只需要其中一些特定的“风格”。

python-3.x button gtk toolbar pygobject
1个回答
1
投票

覆盖一些CSS属性应该可以解决问题。这是对脚本的快速修改。

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

# Added code starts here
from gi.repository import Gdk

css = b"""
.small-button {
  min-height: 0px;
  padding-bottom: 0px;
  padding-top: 0px;
}
"""

css_provider = Gtk.CssProvider()
css_provider.load_from_data(css)

Gtk.StyleContext.add_provider_for_screen(
    Gdk.Screen.get_default(),
    css_provider,
    Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
# End of added code

class MyWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect('destroy', Gtk.main_quit)

        # try it as a toolbar
        toolbar = Gtk.Toolbar()
        for i in range(3):
            widget = Gtk.Label(str(i), expand=False)
            #widget.set_margin_start(0)
            btn = Gtk.ToolButton.new()
            btn.set_label_widget(widget)
            toolbar.insert(btn, -1)

        # try it as simple button line
        hbox = Gtk.HBox()
        for i in range(5):
            btn = Gtk.Button(label=str(i), expand=False, relief=2)
            style_ctx = btn.get_style_context()
            style_ctx.add_class('small-button')
            hbox.pack_start(btn, expand=False, fill=False, padding=0)

        # layout
        vbox = Gtk.VBox()
        vbox.pack_start(toolbar, expand=False, fill=False, padding=0)
        vbox.pack_start(hbox, expand=False, fill=False, padding=0)
        self.add(vbox)


if __name__ == '__main__':
    window = MyWindow()
    window.show_all()
    Gtk.main()

只需更改一组特定小部件的CSS就可以通过为它们指定一个新类来完成。首先获取这些小部件的GtkStyleContext,然后使用其add_class('class-name')方法:

style_ctx = button.get_style_context()
style_ctx.add_class('small-button')

有关CSS主题的更多信息,请参阅GTK文档中的theming section

使用GtkInspector运行GUI以检查小部件的CSS属性。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.