使 PyGObject 中的特定按钮尽可能小
Make a specific button in PyGObject as small as possible
我想要一个带有标签但没有尽可能小的图标的工具栏按钮。按钮上的文本和按钮的边框之间不需要边距。它不必是真正的工具栏。也可以是简单的横排按钮。
#!/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()
编辑:并非应用程序中的所有按钮都应该是这样的。我只需要其中一些特定的 "style"。
重写一些 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 可以通过为它们指定一个新的 class 来完成。首先得到那些widgets的GtkStyleContext
然后使用它的add_class('class-name')
方法:
style_ctx = button.get_style_context()
style_ctx.add_class('small-button')
有关 CSS 主题的更多信息,请参阅 GTK 文档中的 theming section。
运行 使用 GtkInspector 的 GUI 检查小部件的 CSS 属性。
我想要一个带有标签但没有尽可能小的图标的工具栏按钮。按钮上的文本和按钮的边框之间不需要边距。它不必是真正的工具栏。也可以是简单的横排按钮。
#!/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()
编辑:并非应用程序中的所有按钮都应该是这样的。我只需要其中一些特定的 "style"。
重写一些 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 可以通过为它们指定一个新的 class 来完成。首先得到那些widgets的GtkStyleContext
然后使用它的add_class('class-name')
方法:
style_ctx = button.get_style_context()
style_ctx.add_class('small-button')
有关 CSS 主题的更多信息,请参阅 GTK 文档中的 theming section。
运行 使用 GtkInspector 的 GUI 检查小部件的 CSS 属性。