31 个版本 (19 个稳定版)

1.7.2 2024年8月14日
1.7.1 2024年7月25日
1.6.0 2024年5月13日
1.5.1 2024年3月20日
0.2.1 2022年3月10日

#904GUI

Download history 26/week @ 2024-05-04 203/week @ 2024-05-11 91/week @ 2024-05-18 79/week @ 2024-05-25 52/week @ 2024-06-01 52/week @ 2024-06-08 55/week @ 2024-06-15 33/week @ 2024-06-22 32/week @ 2024-06-29 90/week @ 2024-07-06 190/week @ 2024-07-13 224/week @ 2024-07-20 126/week @ 2024-07-27 72/week @ 2024-08-03 205/week @ 2024-08-10 215/week @ 2024-08-17

每月下载量 672
3 个 Crates 中使用

GPL-3.0-only…

4MB
75K SLoC

Slint 解释器库

使用此 crate,您可以在运行时加载 .slint 文件并显示其 UI。

只有当您不想使用预编译的 .slint 代码时,才需要使用此 crate,这是使用 Slint 的常规方式,使用 slint crate

此 crate 的入口点是 Compiler 类型,您可以使用它通过 Compiler::build_from_sourceCompiler::build_from_path 函数创建 CompilationResultCompilationResult 提供了对所有导出组件的访问。为每个组件获取 ComponentDefinition 并使用 [ComponentDefinition::create()] 实例化组件。返回的 ComponentInstance 进一步提供对属性、回调、函数、全局单例的访问,以及实现 ComponentHandle

async 函数注意事项

组件编译是 异步 的,但在实际应用中,只有当设置了 Compiler::set_file_loader 并其实际异步时,才是异步的。如果没有使用这个选项,则可以使用非常简单的执行器,例如由 spin_on 包提供的执行器。

示例

此示例从路径动态加载 .slint 并显示错误(如果有的话)

use slint_interpreter::{ComponentDefinition, Compiler, ComponentHandle};

let compiler = Compiler::default();
let result = spin_on::spin_on(compiler.build_from_path("hello.slint"));
let diagnostics : Vec<_> = result.diagnostics().collect();
diagnostics.print();
if let Some(definition) = result.component("Foo") {
let instance = definition.create().unwrap();
instance.run().unwrap();
}

此示例从字符串加载 .slint 并设置一些属性

use slint_interpreter::{ComponentDefinition, Compiler, Value, SharedString, ComponentHandle};

let code = r#"
export component MyWin inherits Window {
in property <string> my_name;
Text {
text: "Hello, " + my_name;
}
}
"#;

let mut compiler = Compiler::default();
let result =
spin_on::spin_on(compiler.build_from_source(code.into(), Default::default()));
assert_eq!(result.diagnostics().count(), 0);
let definition = result.component("MyWin");
let instance = definition.unwrap().create().unwrap();
instance.set_property("my_name", Value::from(SharedString::from("World"))).unwrap();
instance.run().unwrap();

功能标志

依赖项

~7–49MB
~834K SLoC