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] 私下聯絡我們。