2017-02-02 3 views
1

Я использую Gtk.CssProvider в Genie, чтобы добавить стиль к кнопке и окну.Gtk.CssProvider in Genie

Я не знаю, как указать, что свойство таблицы стилей относится только к кнопке, а другое свойство относится только к окну. Я предполагаю, что это будет выглядеть примерно так:

var css = "" " 
Gtk.Button {background: # FFFF00; } 
Gtk.ApplicationWindow {background: green; } 
"" " 

Я пробовал несколько подобных вещей, но никто не работал на меня. Может быть, с set_name?

Пока я только нашел это решение (плохой код, но он работает):

enter image description here

// compila con valac --pkg gtk+-3.0 nombre_archivo.gs 
uses Gtk 

init 
    new MyApplication("test.application", 
     ApplicationFlags.FLAGS_NONE 
     ).run(args) 

class MyApplication:Gtk.Application 

    construct(application_id:string, flags:ApplicationFlags) 
     if !id_is_valid(application_id) 
      error("application id %s is not valid", application_id) 
     this.application_id = application_id 
     this.flags = flags 

    def override activate() 

     var window = new Gtk.ApplicationWindow(this)  
     window.window_position = WindowPosition.CENTER 
     window.set_border_width(10) 

     var grid = new Gtk.Grid()  

     var boton1 = new Gtk.Button()  
     boton1.label = "Boton 1" 
     boton1.margin = 10 

     var boton2 = new Gtk.Button()  
     boton2.label = "Boton 2" 
     boton2.margin = 10  

     var css_b = "* { background: #FFFF00; }" 
     var css_w = "* { background: green; }" 

     var provider_b = new Gtk.CssProvider() 
     var provider_w = new Gtk.CssProvider() 

     try 
      provider_b.load_from_data(css_b, css_b.length) 
      provider_w.load_from_data(css_w, css_w.length) 
     except e: GLib.Error 
      stderr.printf ("Hoja de estilo no cargada: %s\n", e.message)   

     boton1.get_style_context().add_provider (provider_b, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) 
     window.get_style_context().add_provider (provider_w, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) 

     grid.attach(boton1, 0, 0, 2, 1) 
     grid.attach_next_to (boton2, boton1, Gtk.PositionType.RIGHT, 2, 1) 

     window.add(grid) 
     window.show_all() 

EDIT:

Проблема в том, что это работает:

var css = """  
* {background: #FFFF00; }  
""" 
var provider = new Gtk.CssProvider() 
try 
    provider.load_from_data(css, css.length) 
except e: GLib.Error 
    stderr.printf ("Hoja de estilo no cargada: %s\n", e.message)   

Gtk.StyleContext.add_provider_for_screen (
    Gdk.Screen.get_default(), 
    provider, 
    Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)  

Но это не работает:

var css = """  
GtkButton {background: #FFFF00; }  
""" 
var provider = new Gtk.CssProvider() 
try 
    provider.load_from_data(css, css.length) 
except e: GLib.Error 
    stderr.printf ("Hoja de estilo no cargada: %s\n", e.message)   

Gtk.StyleContext.add_provider_for_screen (
    Gdk.Screen.get_default(), 
    provider, 
    Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)  

ответ

0

Gtk.Button - неправильное название селектора.

Для версий GTK + до 3.20 я считаю, что это был GtkButton.

Начиная с 3.20, вы увидите правильное имя класса в документации по C на https://developer.gnome.org/gtk3/stable/ под узлами CSS.

1

решаемые

Ошибка пропускал Gtk.Widget.get_style_context() add_class ("строка").:

// compila con valac --pkg gtk+-3.0 nombre_archivo.gs 
uses Gtk 

init 
    new MyApplication("test.application", 
     ApplicationFlags.FLAGS_NONE 
     ).run(args) 

class MyApplication:Gtk.Application 

    construct(application_id:string, flags:ApplicationFlags) 
     if !id_is_valid(application_id) 
      error("application id %s is not valid", application_id) 
     this.application_id = application_id 
     this.flags = flags 

    def override activate() 

     var window = new Gtk.ApplicationWindow(this)  
     window.window_position = WindowPosition.CENTER 
     window.set_border_width(10) 
     window.get_style_context().add_class("mi_ventana") 

     var grid = new Gtk.Grid()  

     var boton1 = new Gtk.Button()  
     boton1.label = "Boton 1" 
     boton1.margin = 10 
     boton1.get_style_context().add_class("boton1") 

     var boton2 = new Gtk.Button()  
     boton2.label = "Boton 2" 
     boton2.margin = 10  
     boton2.get_style_context().add_class("boton2") 

     var css = """ 
     .mi_ventana { background: green; } 
     .boton1 { background: #FFFF00; } 
     .boton2 { background: red; } 
     """ 

     var provider = new Gtk.CssProvider() 

     try 
      provider.load_from_data(css, css.length) 
     except e: GLib.Error 
      stderr.printf ("Hoja de estilo no cargada: %s\n", e.message)   

     Gtk.StyleContext.add_provider_for_screen(
      Gdk.Screen.get_default(), 
      provider, 
      Gtk.STYLE_PROVIDER_PRIORITY_USER) 

     grid.attach(boton1, 0, 0, 2, 1) 
     grid.attach_next_to (boton2, boton1, Gtk.PositionType.RIGHT, 2, 1) 

     window.add(grid) 
     window.show_all() 

enter image description here

Смежные вопросы