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日 |
#904 在 GUI 中
每月下载量 672
在 3 个 Crates 中使用
4MB
75K SLoC
Slint 解释器库
使用此 crate,您可以在运行时加载 .slint 文件并显示其 UI。
只有当您不想使用预编译的 .slint 代码时,才需要使用此 crate,这是使用 Slint 的常规方式,使用 slint
crate
此 crate 的入口点是 Compiler
类型,您可以使用它通过 Compiler::build_from_source
或 Compiler::build_from_path
函数创建 CompilationResult
。 CompilationResult
提供了对所有导出组件的访问。为每个组件获取 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