I think you understood their comment wrong. In your code (e.g. label.add_css_class("green");
) you don't use a dot, but in the CSS stylesheet. It works the same as with HTML/JS/CSS.
Well, that's CSS :D
Note that if you create a custom Widget class, you can set a CSS name, wich isn't a CSS class and doesn't use a leading dot.
Just use label.add_css_class()
, label.remove_css_class()
or label.set_css_classes()
and make sure to properly load your CSS style sheets, this is usually done by including them as a resource alongside .ui files and icons. If you are using libadwaita, you can also use its predefined style classes.
full example (requires nightly toolchain)
#!/usr/bin/env -S cargo +nightly -Zscript
***
[dependencies]
gtk = { package = "gtk4", version = "0.9.3", features = ["v4_12"] }
***
use gtk::{glib, prelude::*};
const STYLESHEET: &str = r#"
.green {
color: green;
}
.red {
color: red;
}
"#;
fn main() -> glib::ExitCode {
let app = gtk::Application::builder()
.application_id("org.example.HelloWorld")
.build();
app.connect_activate(|app| {
let window = gtk::ApplicationWindow::builder()
.application(app)
.title("Hello, World!")
.build();
// Stylesheets are usually bundled with application resources
// and automatically loaded
let css_provider = gtk::CssProvider::new();
css_provider.load_from_string(STYLESHEET);
gtk::style_context_add_provider_for_display(
&RootExt::display(&window),
&css_provider,
0
);
let box_ = gtk::Box::new(gtk::Orientation::Vertical, 6);
let label = gtk::Label::builder()
.label("Hello, World")
.css_classes(["green"].as_slice())
.build();
box_.append(&label);
let button = gtk::Button::builder()
.label("Toggle Color")
.build();
box_.append(&button);
button.connect_clicked(glib::clone!(#[weak] label, move |_| {
if label.has_css_class("red") {
label.add_css_class("green");
label.remove_css_class("red");
} else {
label.add_css_class("red");
label.remove_css_class("green");
}
}));
window.set_child(Some(&box_));
window.present();
});
app.run()
}
This is extremely sad. I use Syncthing a lot to sync documents between my phone an my computer.
The main benefit over client/server-based solutions are that it always works.
No network connection? No problem, the files are all stored locally.
I broke my home server again? No problem, the devices can talk directly to each other.
They even implemented it in Firefox: moz://a redirects to https://www.mozilla.org/en-US/about/manifesto/
I don't like it. He is just perpetuating the endless stereotypes that plague linux and harm linux adoption.
If you are using a somewhat stable distro and don't have weird hardware, you don't need to "write your own driver" etc. A lot more people "punch themselves in the face" by using a buggy, ad infested, data harvesting operating system even though they just need a web browser.
I think Germany’s done it twice now.
It was Munich and they switched back to Windows after M$ moved their German headquarters to Munich.
Declaring the use without a paid license as “Unlicensed” is very misleading since the project is also licensed under the GNU AGPL v3.0.
The error message is very detailed and there is nothing to add to it.
If you want to install an application/CLI tool, use
pipx
or your system package manager. If you want to install a library, use a virtual environment (e.g. by usingpython -m venv
) or your system package manager.