#python-3.x #button #gtk #toolbar #pygobject
#python-3.x #кнопка #gtk #панель инструментов #pygobject
Вопрос:
Я хотел бы иметь кнопку панели инструментов с надписью, но без значка, которая была бы как можно меньше. Нет необходимости в полях между текстом на кнопке и границей кнопки. Это не обязательно должна быть настоящая панель инструментов. Это также может быть простая горизонтальная линия кнопок.
#!/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()
РЕДАКТИРОВАТЬ: Не все кнопки в приложении должны быть такими. Мне нужен этот конкретный «стиль» только для некоторых из них.
Ответ №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 темы.
Запустите свой графический интерфейс с помощью GtkInspector, чтобы проверить CSS-свойства виджета.
Комментарии:
1. Извините, я понятия не имею о CSS. Где
Gtk.Button
в вашем примере? Пожалуйста, предоставьте рабочий код.2. Это рабочий код, отредактированный сейчас, чтобы сделать его более понятным.
3. Большое спасибо. Я обновил свою тему и вопрос. Для меня это все еще загадка. Я не вижу связи между
Gtk.Button
и «стилем». Также не могу найти описание об этом в GTK-CSS-doc — но я предполагаю, что оно есть.4. Попытался объяснить еще немного. Теперь уменьшен только нижний ряд кнопок.
5. Очевидно, что добавление
small-button
класса непосредственно вGtkToolButton
не имеет никакого эффекта, но у него естьGtkButton
дочерний элемент, который действительно работает. Так же вы можете сделатьstyle_ctx = btn.get_child().get_style_context()
дляGtkToolButton
s. Нашел это с помощью GtkInspector.