Cargo.toml
[dependencies]
eframe = "0.32.1"
egui = "0.32.1"
?啟動函數一:run_simple_native
- 簡化版入口函數,適用于快速原型開發
- 僅需提供應用標題和 UI 渲染閉包即可運行
- 典型使用場景:單面板工具、簡單演示程序
// 導入egui核心庫和eframe框架(eframe是egui的本地窗口封裝)
use eframe::egui;// 主函數返回Result類型以處理可能的錯誤
fn main() -> eframe::Result<()> {// 配置原生窗口參數let options = eframe::NativeOptions::default();eframe::run_simple_native("My egui App", options, move |ctx, _frame| {egui::CentralPanel::default().show(ctx, |ui| {ui.heading("Hello from egui 0.32.1!"); // 添加一級標題ui.label("This is a simple window in Ubuntu."); // 添加普通文本標簽});})
}
啟動函數二:?run_native
- 完整功能入口,支持自定義應用生命周期管理
- 需要實現
eframe::App
trait
的結構體 - 典型使用場景:復雜應用、需要持久化狀態的項目
// 導入egui核心庫和eframe框架(eframe是egui的本地窗口封裝)
use eframe::egui;// 主函數返回Result類型以處理可能的錯誤
fn main() -> Result<(), eframe::Error> {let options = eframe::NativeOptions { // 配置窗口的初始參數// 設置窗口初始大小為400x300像素viewport: egui::ViewportBuilder::default().with_inner_size([400.0, 300.0]),..Default::default() // 其他參數保持默認值};// 啟動原生窗口應用eframe::run_native("My egui App", // 窗口標題options, // 傳入配置選項Box::new(|_cc| Ok(Box::<MyApp>::default())), // 創建應用實例的閉包,_cc包含創建上下文信息)
}// 定義應用的主要結構體
struct MyApp{}// 為MyApp實現Default trait以提供默認初始化
impl Default for MyApp {fn default() -> Self {Self // 返回空結構體實例}
}// 為MyApp實現eframe::App trait定義應用行為
impl eframe::App for MyApp {// 每幀調用的更新函數fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {egui::CentralPanel::default().show(ctx, |ui| { // 創建中央面板(egui的主要布局組件)ui.heading("Hello from egui 0.32.1!"); // 添加一級標題ui.label("This is a simple window in Ubuntu."); // 添加普通文本標簽});}
}
選擇建議
-
優先選擇
run_simple_native
當:- 開發臨時性工具
- 無需復雜狀態管理
- 快速驗證UI設計
-
必須使用
run_native
當:- 需要保存用戶配置
- 實現多窗口交互
- 處理文件I/O等系統操作
兩者底層均基于相同的egui
渲染引擎,性能差異可以忽略。對于WebAssembly
目標,對應存在run_simple_web
和run_web
變體。