Question Comment se débarrasser du dégradé de fond du GtkToolbar en ligne?


Lorsque vous exécutez le code ci-dessous, une barre d'outils intégrée s'affiche dans une fenêtre. Notez que la barre d'outils en ligne a un backbround exceptionnel. Existe-t-il un moyen d’appliquer le CSS pour se débarrasser de lui et fusionner avec une couleur de fenêtre normale?

#!/usr/bin/python3
from gi.repository import Gtk

button_names = [Gtk.STOCK_ABOUT, Gtk.STOCK_ADD, Gtk.STOCK_REMOVE, Gtk.STOCK_QUIT]
buttons = [Gtk.ToolButton.new_from_stock(name) for name in button_names]
toolbar = Gtk.Toolbar()
toolbar.set_show_arrow(False)
for button in buttons:
    toolbar.insert(button, -1)
style_context = toolbar.get_style_context()
style_context.add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR)
grid = Gtk.Grid()
grid.add(toolbar)
label = Gtk.Label()
grid.add(label)
window = Gtk.Window()
window.set_size_request(200, 50)
window.add(grid)
window.connect('delete-event', Gtk.main_quit)
window.show_all()
Gtk.main()

En utilisant le code andrewsomething, il commence à paraître meilleur mais la "frontière" est toujours là et prend de la place. Notez que dans la capture d'écran ci-dessous, la barre d'outils à gauche est plus petite que les boutons habituels à droite: ubiquity testing


6
2017-09-07 22:29


origine




Réponses:


Et c'est parti:

example screenshot

Vous devez d'abord trouver la couleur d'arrière-plan par défaut pour le thème actuel. Ensuite, vous pouvez l'injecter dans le css actuel pour la classe GtkToolbar.

# Get the default window background color for the the current theme.
win_style_context = window.get_style_context()
bg = win_style_context.lookup_color('theme_bg_color')[1].to_string()

# Then we set that as the background for GtkToolbar
# We also make the boarder transparent
css_provider = Gtk.CssProvider()
toolbar_css = ".inline-toolbar.toolbar { background: %s; border-color: transparent; }" % (bg)
css_provider.load_from_data(toolbar_css.encode('UTF-8'))
screen = Gdk.Screen.get_default()
win_style_context.add_provider_for_screen(screen, css_provider,
                                          Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

Notez que vous devez from gi.repository import Gdk


11
2017-09-12 16:52



Je vais l'ajouter à l'ubiquité d'abord et seulement ensuite récompenser la prime. - Dima
Cela peut-il être fait uniquement pour la barre d'outils en ligne? - Dima
Vous perdez des points brownie pour ne pas être pep8 ni conforme à python3 - Dima
Mis à jour pour Python3. Il ne devrait plus s'appliquer qu'aux barres d'outils en ligne. Quel est le problème de pep8? Longueur de la ligne? - andrewsomething
tout bon. Maintenant, le problème est que la frontière est toujours là et prend encore de la place. Laissez-moi poster une capture d'écran. - Dima


Vous pouvez aussi utiliser:

css_provider = Gtk.CssProvider()
toolbar_css = ".inline-toolbar { background: alpha (@base_color, 0.0); border-color: transparent; }"
css_provider.load_from_data(toolbar_css.encode('UTF-8'))
win_style_context.add_provider(css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

0
2018-01-12 01:45