精灵中的Gtk.CssProvider

精灵中的Gtk.CssProvider,gtk,gtk3,genie,Gtk,Gtk3,Genie,我正在使用精灵中的Gtk.CssProvider为按钮和窗口添加样式 我不知道如何指定样式表属性仅适用于按钮,而另一个属性仅适用于窗口。我想它会像这样: var css = "" " Gtk.Button {background: # FFFF00; } Gtk.ApplicationWindow {background: green; } "" " 我试过几种类似的方法,但没有一种对我有效。也许用你的名字 目前为止,我只找到了这个解决方案(错误的代码,但它可以工作): 编辑: 问题在于,这

我正在使用精灵中的Gtk.CssProvider为按钮和窗口添加样式

我不知道如何指定样式表属性仅适用于按钮,而另一个属性仅适用于窗口。我想它会像这样:

var css = "" "
Gtk.Button {background: # FFFF00; }
Gtk.ApplicationWindow {background: green; }
"" "
我试过几种类似的方法,但没有一种对我有效。也许用你的名字

目前为止,我只找到了这个解决方案(错误的代码,但它可以工作):

编辑:

问题在于,这是可行的:

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)    

Gtk.按钮
不是正确的选择器名称

对于3.20之前的GTK+版本,我相信它是
GtkButton

从3.20开始,您将在CSS节点下的C文档中看到正确的类名。

错误缺少Gtk.Widget.get_style_context()。添加_类(“字符串”):

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)    
// 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()