大家好,我是小羊,Rust愛好者, 一生只愛一門語言,那便是Rust語言 。
歡迎大家關註我的公眾號「Rust開發筆記」,分享最新的 Rust 語言動態、教程、最佳實踐以及實用技巧。
在上篇文章 裏,我介紹了Relm 框架,作為Rust生態中的一員,提供了一種聲明式、事件驅動的方法來構建GUI,深入探究了relm的設計理念、特性以及套用例項,為廣大Rust愛好者開啟了構建跨平台GUI套用的新篇章。
同時,我也發起了一個 「 Rust GUI框架你了解多少? 」 的投票,透過目前的投票結果來看,排在前三的GUI框架分別是 Slint、egui、Dioxus。
往期文章已經介紹過排名前三的GUI框架:
Slint:
egui:
Dioxus:
今天我將介紹下排名第四的 Iced GUI框架。
在 Rust 社群中,Iced 是值得關註的跨平台 GUI (圖形化使用者介面) 庫之一。由
iced-rs
團隊開發,Iced的設計靈感來源於 Elm 語言,它以簡潔性和型別安全性為特色,旨在提供一個簡單易用且功能豐富的 GUI 開發體驗。本文將深入探討 Iced,並提供詳盡的範例和教學,希望幫助讀者更好地理解和使用這個庫。
Iced 的核心特性
Iced 專註於以下幾個核心特性:
簡潔易用的 API :提供了一套結構清晰的 API,便於快速上手和開發。
型別安全的反應式編程模型 :利用 Rust 強大的型別系統,確保了程式碼的安全性。
跨平台支持 :同時支持 Windows, macOS, Linux, 以及 Web 平台。
響應式布局 :易於建立靈活且自適應的使用者介面。
內建控制項 :包含豐富的預制控制項供開發者使用。
自訂控制項支持 :允許開發者根據需求建立客製的控制項。
偵錯疊加層 :內建效能度量工具,方便開發者進行效能偵錯。
使用 Iced 構建你的第一個 Rust 套用
要開始使用 Iced 構建 GUI 套用,你需要首先確保 Rust 的開發環境已經搭建好。接下來,我們將逐步構建一個簡單的套用來展示 Iced 的用法。
第一步:建立計畫並添加依賴
開啟終端,使用以下命令建立一個新的 Rust 計畫:
cargo new my_iced_app
cd my_iced_app
然後,開啟
Cargo.toml
檔,添加 Iced 庫作為依賴:
[dependencies]
iced = "0.4"
第二步:編輯 main.rs
接下來,我們將編寫套用的主邏輯。編輯
src/main.rs
檔,填入以下程式碼:
use iced::{Application, Button, Column, Command, Element, Sandbox, Settings, Text};
pubfnmain() -> iced::Result {
Counter::run(Settings::default())
}
structCounter {
value: i32,
increment_button: Button,
decrement_button: Button,
}
#[derive(Debug, Clone, Copy)]
enumMessage {
IncrementPressed,
DecrementPressed,
}
impl Sandbox for Counter {
typeMessage = Message;
fnnew() -> Self {
Counter {
value: 0,
increment_button: Button::new(),
decrement_button: Button::new(),
}
}
fntitle(&self) -> String {
String::from("Iced Counter Example")
}
fnupdate(&mutself, message: Message) -> Command<Message> {
match message {
Message::IncrementPressed => self.value += 1,
Message::DecrementPressed => self.value -= 1,
}
Command::none()
}
fnview(&mutself) -> Element<Message> {
Column::new()
.push(
Button::new(&mutself.increment_button, Text::new("Increment"))
.on_press(Message::IncrementPressed),
)
.push(
Button::new(&mutself.decrement_button, Text::new("Decrement"))
.on_press(Message::DecrementPressed),
)
.push(Text::new(self.value.to_string()))
.into()
}
}
第三步:執行你的第一個 Iced 套用
保存
main.rs
檔後,執行以下命令,編譯並啟動 GUI 套用:
cargo run
套用啟動後,你會看到一個簡單的計數器界面,界面上有「Increment」和「Decrement」兩個按鈕用於增減計數值。
擴充套件:建立響應式布局和自訂控制項
Iced 不僅限於建立基礎的控制項和布局,你還可以利用響應式布局建立復雜且自適應的界面。此外,自訂控制項可以讓你的套用更加吸引人,下面我們來看一個自訂控制項的例子:
use iced::{button, Button, Column, Command, Element, Sandbox, Settings, Text};
// 定義你的自訂控制項
structMyCustomWidget {
// 控制項內部的狀態和內容
}
// 實作自訂控制項的邏輯
impl MyCustomWidget {
// 建立控制項的新例項
fnnew() -> Self {
// 初始化控制項狀態
}
// 實作控制項的渲染邏輯
fnview(&mutself) -> Element<Message> {
// 返回 Element 型別的 GUI 表示
}
}
// 後續類似於 Counter 範例的結構和實作邏輯
在這段程式碼中,我們定義了一個
MyCustomWidget
控制項,並為它實作了基礎的構建和渲染邏輯。這就是 Iced 靈活性的一種體現,允許你根據具體的套用需求進行客製。
結語
透過本文的介紹,你應該對 Iced 有了基本的了解。Iced 以其簡潔的 API、強型別設計和跨平台特性,為 Rust GUI 開發提供了一個非常有吸重力的選項。你還可以在它的 GitHub 頁面上找到更多的資訊、文件和範例,以及如何為這個開源計畫做出貢獻。如果你對 GUI 開發感興趣,Iced 是一個學習和實踐的好起點。不要猶豫,開始你的 Rust GUI 之旅吧!
文章精選
點 擊 關 註 並 掃 碼 添 加 進 交 流 群
領
取
「Rust
語
言
」
學
習
資
料
關註公眾號並回復 「Iced」 立即獲取計畫地址。