【问题标题】:Vala Not Connecting to Style SheetVala 没有连接到样式表
【发布时间】:2019-09-15 19:15:36
【问题描述】:

在使用 Java 编程几年后,我现在正在学习 Vala。

在网上进行了一些广泛的搜索后,我发现了一种使用 CSS 样式表设置 GTK 窗口背景样式的方法,来自给定的示例 here ,它使用了 GTk.Window 类扩展。该代码在我的机器(Ubuntu 19.04)上编译良好,并且小部件的样式符合预期。

我试图将这种方法与 site 中的一种方法结合起来。这里,vala 类扩展到 Gtk.Application,而不是 Gtk.Window。

代码编译并打开窗口,但小部件没有根据样式表设置样式。

public class StyleApp1 : Gtk.Application {

    public StyleApp1 () {
        Object (
            application_id: "com.css.test",
            flags: ApplicationFlags.FLAGS_NONE
        );
    }

    protected override void activate () {

        var window = new Gtk.ApplicationWindow (this);
        window.set_default_size (350, 500);
        window.title = "Hello World";
        window.get_style_context().add_class("my_window");

        var screen = window.get_screen ();

        var css_provider = new Gtk.CssProvider();
        string path = "styleapp1.css";

        // test if the css file exist
        if (FileUtils.test (path, FileTest.EXISTS))
        {
            try {
                stdout.printf("File is there");
                css_provider.load_from_path(path);
                Gtk.StyleContext.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER);
            } catch (Error e) {
                error ("Cannot load CSS stylesheet: %s", e.message);
            }
        }

        var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 10);
        window.add (box);

        var label = new Gtk.Label ("Thank you");
        box.add (label);

        var label2 = new Gtk.Label ("Stackoverflow");
        label2.get_style_context().add_class("my_class");
        box.add (label2);

        window.show_all ();
    }

    public static int main (string[] args) {
        var app = new StyleApp1 ();
        return app.run (args);
    }
}

CSS 文件 (syleapp1.css)

GtkWindow {
    font-size: 17px;
}

.my_class {
    color: red;
}

.my_window {
    background-color: rgba (200, 100, 100, 0.9);
 }

介子构建文件:

project('com.css.test' , 'vala' , 'c')

executable (
    meson.project_name(),
   'StyleApp1.vala',

    dependencies: [
        dependency('gtk+-3.0')
    ],
install: true
)

我不知道我错过了什么。有人可以解释并指出我正确的方向吗?

非常感谢提前。

【问题讨论】:

    标签: css vala


    【解决方案1】:

    这里很好用:

    我目前正在使用 Windows / msys2。

    【讨论】:

    • 这很有趣....感谢您的尝试。你如何编译?你在用介子吗?
    • 只是简单的编译器:valac -o styleapp1 styleapp1.vala --pkg gtk+-3.0
    • 直接编译也适用于我的机器。当我使用介子编译时,CSS 样式不起作用。你能弄清楚为什么吗?我已编辑查询以包含构建文件。
    • 我尝试使用介子构建(这次是在 Linux 上)。它仍然可以正常工作,但是使用介子将可执行文件放入构建目录(或安装目录)中。当 .css 文件不存在时,不会出现样式。所以也许你把你的目录弄糊涂了。也许用样式表文件的绝对路径进行测试? (更好的解决方案是使用 GLib 资源编译器)
    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2019-09-17
    相关资源
    最近更新 更多