當前位置: 妍妍網 > 碼農

Rust 語言中的跨平台 GUI 庫

2024-04-19碼農

大家好,我是小羊,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」 立即獲取計畫地址。