以下是 Rust Iced GUI 框架的入门指南,涵盖核心概念、安装步骤和简单示例,帮助您快速上手。
1. Iced 简介
Iced 是一个跨平台、数据驱动的 Rust GUI 库,专注于简单性和类型安全。它基于 Elm 架构,采用单向数据流模式,适合构建响应式界面。
2. 安装 Iced
在 Cargo.toml 中添加依赖:
[dependencies]
iced = "0.12"
3. 核心概念
- 状态(State):应用的数据模型。
- 消息(Message):枚举类型,定义用户交互事件(如按钮点击)。
- 更新逻辑(Update):根据消息修改状态。
- 视图(View):将状态渲染为 UI 元素。
4. 简单示例:计数器应用
以下代码创建一个带按钮的计数器,点击按钮数字增加:
use iced::{button, Button, Column, Element, Sandbox, Settings, Text};
// 定义消息类型
#[derive(Debug, Clone, Copy)]
pub enum CounterMessage {
Increment,
}
// 定义状态
struct Counter {
value: i32,
increment_button: button::State,
}
// 实现 Sandbox trait(简化版应用)
impl Sandbox for Counter {
type Message = CounterMessage;
fn new() -> Self {
Self {
value: 0,
increment_button: button::State::new(),
}
}
fn title(&self) -> String {
String::from("Counter - Iced")
}
fn update(&mut self, message: Self::Message) {
match message {
CounterMessage::Increment => {
self.value += 1;
}
}
}
fn view(&mut self) -> Element<Self::Message> {
Column::new()
.push(Text::new(format!("Count: {}", self.value)).size(50))
.push(
Button::new(&mut self.increment_button, Text::new("Increment"))
.on_press(CounterMessage::Increment),
)
.into()
}
}
// 启动应用
fn main() -> iced::Result {
Counter::run(Settings::default())
}
5. 运行应用
在终端执行:
cargo run
一个窗口将显示计数器和按钮,点击按钮数字递增。
6. 下一步学习
Iced 易于扩展,适合桌面应用开发。通过修改状态和视图,可构建复杂界面。