Rust 初学者指南:用 egui+eframe 开发 Windows 时钟应用
学习笔记作者:admin日期:2025-05-27点击:189
摘要:本文介绍如何使用 Rust 和 egui+eframe 框架快速构建一个 Windows 桌面时钟应用,并详细说明了从环境搭建到代码实现的全过程。
Rust 初学者指南:用 egui+eframe 开发 Windows 时钟应用
一、技术栈
- 编程语言:Rust
- GUI 框架:egui + eframe
- IDE:VSCode
- 构建系统:Cargo
- 示例功能:实时更新的时钟应用
二、环境搭建步骤
- 安装 Rust 工具链:
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 安装 VSCode 插件:Rust Analyzer、CodeLLDB、crates、Toml语言支持。
- 配置 VSCode 调试环境:
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "lldb",
      "request": "launch",
      "name": "Debug executable 'hello'",
      "cargo": "run",
      "args": [],
      "cwd": "${workspaceFolder}"
    }
  ]
}三、时钟应用代码实现
      以下是完整的 main.rs 代码:
use eframe::egui;
use std::time::{SystemTime, UNIX_EPOCH};
fn main() -> Result<, eframe::Error> {
    let options = eframe::NativeOptions::default();
    eframe::run_native(
        "我的时钟 App",
        options,
        Box::new(|_cc| Box::new(MyClockApp::new())),
    )
}
struct MyClockApp {
    current_time: String,
}
impl MyClockApp {
    fn new() -> Self {
        Self {
            current_time: get_current_time(),
        }
    }
}
impl eframe::App for MyClockApp {
    fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
        // 每秒更新一次时间
        if ctx.input().time.round() as u64 % 1 == 0 {
            self.current_time = get_current_time();
        }
        egui::CentralPanel::default().show(ctx, |ui| {
            ui.heading("⏰ 当前时间");
            ui.label(&self.current_time);
        });
    }
}
fn get_current_time() -> String {
    let now = SystemTime::now()
        .duration_since(UNIX_EPOCH)
        .unwrap();
    let seconds = now.as_secs();
    chrono::NaiveDateTime::from_timestamp_opt(seconds as i64, 0)
        .map(|t| t.format("%Y-%m-%d %H:%M:%S").to_string())
        .unwrap_or_default()
}四、运行效果
运行后,窗口将显示当前时间,并每秒自动更新。
五、后续建议
- 学习更多 egui 控件功能。
- 尝试异步编程提升性能。
- 使用 cargo-wix 或 cargo-bundle 打包应用。