Slint 是一个声明式 GUI 工具包,用于为用 Rust、C++、JavaScript 或 Python 编写的嵌入式、桌面和移动应用程序构建本机用户界面。
Slint这个名字源自我们的设计目标:
访问#MadeWithSlint 查看一些使用 Slint 的项目。我们邀请您使用 Slint 并成为其社区的一部分。
Slint 正在积极开发中。各平台的支持情况如下:
Slint 支持许多小部件的基于键盘的导航,并且用户界面是可扩展的。屏幕阅读器等辅助技术的基本基础设施已经到位。我们意识到,需要做更多的工作才能为有特殊需求的用户提供一流的支持。
树莓派 | STM32 | RP2040 |
---|---|---|
Raspberry Pi 上的 Slint 视频 | STM32 上的 Slint 视频 | Slint 在 RP2040 上的视频 |
视窗 | macOS | Linux |
---|---|---|
打印机演示 | 幻灯片拼图 | 能源监测器 | 小工具库 | 天气演示 |
---|---|---|---|---|
示例文件夹中的更多示例和演示
UI 采用领域特定语言定义,该语言具有声明性、易于使用、直观,并提供了一种强大的方式来描述图形元素、其位置、层次结构、属性绑定以及不同状态下的数据流。
这是强制性的“Hello World”:
export component HelloWorld inherits Window {
width : 400px ;
height : 400px ;
Text {
y : parent .width / 2 ;
x : parent .x + 200px ;
text : "Hello, world" ;
color : blue ;
}
}
有关更多详细信息,请查看 Slint 语言文档。
示例文件夹包含示例和演示,展示如何使用 Slint 标记语言以及如何通过支持的编程语言与 Slint 用户界面进行交互。
docs
文件夹包含更多信息,包括构建说明和内部开发人员文档。
参考api
文件夹下各语言目录的README:
应用程序由用 Rust、C++ 或 JavaScript 编写的业务逻辑和.slint
用户界面设计标记组成,该标记被编译为本机代码。
.slint
文件是提前编译的。 .slint
中的表达式是编译器可以优化的纯函数。例如,编译器可以选择“内联”属性并删除那些常量或未更改的属性。未来,我们希望通过预处理图像和文本来改善低端设备上的渲染时间。编译器可以确定Text
或Image
元素始终位于同一位置的另一个Image
之上。因此,两个元素可以提前渲染成单个元素,从而减少渲染时间。
编译器使用典型的编译器阶段:词法分析、解析、优化,最后是代码生成。它为目标语言的代码生成提供了不同的后端。 C++ 代码生成器生成 C++ 头文件,Rust 生成器生成 Rust 代码,等等。还包括动态语言的解释器。
运行时库包含一个支持以.slint
语言声明的属性的引擎。组件及其元素、项和属性都布置在单个内存区域中,以减少内存分配。
渲染后端和样式可以在编译时配置:
femtovg
渲染器使用 OpenGL ES 2.0 进行渲染。skia
渲染器使用Skia进行渲染。software
渲染器使用 CPU,没有任何额外的依赖项。注意:当系统上安装了 Qt 时, qt
样式就可用,使用 Qt 的 QStyle 来实现本机外观的小部件。
我们有一些工具可以帮助开发 .slint 文件:
--auto-reload
参数使您可以在处理 UI 时轻松预览 UI(当无法使用 LSP 预览时)。请查看我们的编辑器自述文件,了解有关如何配置您最喜欢的编辑器以与 Slint 良好配合的提示。
您可以选择根据以下任何许可证使用 Slint:
请参阅网站上的 Slint 许可选项和许可常见问题解答。
我们欢迎您以代码、错误报告或反馈的形式做出贡献。
请参阅我们单独的常见问题解答。
我们对软件充满热情 - API 设计、跨平台软件开发和用户界面组件。我们的目标是让每个人都能享受开发用户界面的乐趣:从 Python、JavaScript、C++ 或 Rust 开发人员一直到 UI/UX 设计师。我们相信软件会有机增长,保持开源是维持这种增长的最佳方式。我们的团队成员位于德国偏远地区。
请随意加入 Github 讨论以进行一般聊天或提问。使用 Github issues 报告公众建议或错误。
我们在 Mattermost 实例中聊天,欢迎您收听或提出问题。
您当然也可以通过发送电子邮件至 [email protected] 私下联系我们。