ITADN
slint-ui/slint
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Slint Slint

Build Status REUSE status Discussions

Slint 是一个开源的声明式 GUI 工具包,用于为嵌入式系统、桌面和移动平台构建原生用户界面。

使用 .slint 这种简单的标记语言,只需编写一次 UI。将其与用 Rust、C++、JavaScript 或 Python 编写的业务逻辑连接起来。

为什么选择 Slint?

Slint 这个名字源自我们的设计目标:

  • 可扩展性:Slint 应支持响应式 UI 设计,允许跨操作系统和处理器架构的跨平台 使用,并支持多种编程语言。
  • 轻量级:Slint 应尽可能少地占用资源,包括内存 和处理能力,同时在任何设备上都能提供流畅的、类似智能手机的 用户体验。
  • 直观性:设计师和开发者应在享受 GUI 设计和开发过程的同时感到高效。设计创建工具对 设计师来说应易于使用。同样,对于开发者而言,无论他们选择哪种编程语言,API 都应保持一致且易于使用。
  • 原生性:使用 Slint 构建的 GUI 应符合最终用户对 原生应用的期望,无论平台是桌面、移动、Web 还是 嵌入式系统。UI 设计应编译为机器代码,并提供 只有原生应用才能提供的灵活性:访问完整的操作系统 API,利用所有 CPU 和 GPU 核心,连接任何外设。

除了设计目标之外,以下是 Slint 的突出之处:

  • 独立的 UI 设计:使用声明式语言将 UI 与业务逻辑分离。设计师可以与开发人员并行工作。
  • 工具链:通过我们的实时预览和编辑器集成快速迭代。使用 Figma to Slint 插件 从 Figma 集成。
  • 稳定的 API:Slint 遵循稳定的 1.x API。我们谨慎演进,不会破坏您的代码。

看看其他人构建了什么:#MadeWithSlint

示例

嵌入式

RaspberryPiSTM32RP2040
Video of Slint on Raspberry PiVideo of Slint on STM32Video of Slint on RP2040

桌面

WindowsmacOSLinux
Screenshot of the Gallery on WindowsScreenshot of the Gallery on macOSScreenshot of the Gallery on Linux

使用 WebAssembly 的 Web

打印机演示滑块拼图能耗监控小部件画廊天气演示
打印机演示截图滑块拼图截图能耗监控演示截图画廊演示截图天气演示截图

更多示例和演示位于 examples 文件夹

快速开始

Hello World

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 文档

examples 文件夹包含示例和演示,展示了如何 使用 Slint 标记语言以及如何从受支持的编程语言与 Slint 用户界面进行交互。

docs 文件夹包含更多信息,包括 构建说明内部开发者文档

请参阅 api 文件夹中每个语言目录的 README:

架构

应用程序由用 Rust、C++、Python 或 JavaScript 编写的业务逻辑以及 .slint 用户界面设计标记组成,后者会被编译为 原生代码。

Architecture Overview

编译器

.slint 文件会被提前编译。.slint 中的表达式是编译器可以优化的纯函数。例如,编译器可以选择“内联”属性,并移除那些常量或不变的属性。

编译器使用典型的编译阶段:词法分析、解析、优化,最后是代码生成。它为目标语言提供不同的代码生成后端。C++ 代码生成器生成 C++ 头文件,Rust 生成器生成 Rust 代码,依此类推。还包含一个用于动态语言的解释器。

运行时

运行时库由一个支持在 .slint 语言中声明的属性的引擎组成。组件及其元素、项和属性被布局在单个内存区域中,以减少内存分配。

渲染后端和样式可在编译时配置:

  • femtovg 渲染器使用 OpenGL ES 2.0 进行渲染。
  • skia 渲染器使用 Skia 进行渲染。
  • software 渲染器使用 CPU,无额外依赖。

注意:当系统上安装了 Qt 时,qt 样式变得可用,使用 Qt 的 QStyle 来实现原生外观的小部件。

工具

我们有一些工具来帮助开发 .slint 文件:

  • 一个 LSP Server,为许多编辑器添加了自动补全和 .slint 文件实时预览等功能。
  • 它包含在一个 Visual Studio Code Extension 中,可从市场获取。
  • 一个 slint-viewer 工具,用于显示 .slint 文件。 --auto-reload 参数使得在开发过程中轻松预览 UI 成为可能(当使用 LSP 时无法预览)。
  • SlintPad,一个在线编辑器,用于尝试 .slint 语法, 无需安装任何内容(sources)。
  • 一个 Figma to Slint 插件。

请查看我们的 Editors README,了解如何配置您喜爱的编辑器以良好地配合 Slint 工作。

License

请参阅 LICENSE.md 了解整个仓库(包括文档和示例)的许可条款。

您可以选择以下任一许可证使用 Slint:

  1. 使用 Royalty-free License 免费构建专有桌面、移动或 Web 应用程序,
  2. 使用 GNU GPLv3 免费构建开源嵌入式、桌面、移动或 Web 应用程序,
  3. 使用 Commercial license 构建专有嵌入式、桌面、移动或 Web 应用程序。

请参阅 Slint licensing options on the websiteLicensing FAQ

Contributions

我们欢迎您的贡献:包括代码、错误报告或反馈。 有关贡献指南,请参阅 CONTRIBUTING.md

Frequently Asked Questions

请参阅我们单独的 FAQ

About us (SixtyFPS GmbH)

我们对软件充满热情——API 设计、跨平台软件开发以及用户界面组件。我们的目标是让每个人都能享受开发用户界面的乐趣:从 Python、JavaScript、C++ 或 Rust 开发者到 UI/UX 设计师。我们相信软件是有机生长的,保持开源是维持这种增长的最佳方式。我们的团队成员远程分布在德国、芬兰和美国。

保持更新

联系我们

欢迎加入 Github 讨论区 进行一般性聊天或提问。使用 Github 议题 来报告公开的建议或错误。

我们在 我们的 Mattermost 实例 中聊天,欢迎 您旁听或提出您的问题。

您当然也可以通过电子邮件 info@slint.dev 私下联系我们。