rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十三)菜单、右键菜单

学习菜单未解决问题:点击菜单项后不关闭菜单。知道怎么解决朋友的欢迎留言,谢谢。

一、菜单menu_button

  • 菜单结构:
bash 复制代码
菜单
 |- 文件
     |- 打开文件
     |- 创建文件
 |- 退出
 |- 帮助
     |- 软件版本
  • 代码:
    • 菜单可以随意嵌套
    • 菜单的最终节点为按钮等控件
rust 复制代码
fn main() -> eframe::Result<()> {
    // 配置原生窗口参数
    let options = eframe::NativeOptions::default();
    eframe::run_simple_native("菜单", options, move |ctx, _frame| {
        egui::CentralPanel::default().show(ctx, |ui| {
            load_fonts(&ctx);
            ui.menu_button("菜单", |ui| {
                ui.menu_button("文件", |ui| {
                    ui.button("打开文件");
                    ui.button("创建文件");
                });
                ui.button("退出");
                ui.menu_button("帮助", |ui| ui.button("软件版本"))
            })
        });
    })
}

1、菜单点击事件

  • 菜单的点击事件,就是按钮的点击事件
rust 复制代码
fn main() -> eframe::Result<()> {
    // 配置原生窗口参数
    let options = eframe::NativeOptions::default();
    let mut key = String::new();     // 获取点击的菜单项
    eframe::run_simple_native("菜单", options, move |ctx, _frame| {
        egui::CentralPanel::default().show(ctx, |ui| {
            load_fonts(&ctx);
            ui.menu_button("菜单", |ui| {
                ui.menu_button("文件", |ui| {
                    if ui.button("打开文件").clicked() {
                        key = "打开文件".into();      // 点击事件
                    };
                    if ui.button("创建文件").clicked() {
                        key = "创建文件".into();      // 点击事件
                    };
                });
                ui.button("退出");
                ui.menu_button("帮助", |ui| ui.button("软件版本"))
            });
            ui.label(&key);  // 显示点击后的信息
        });
    })
}

2、菜单中的复选框

rust 复制代码
fn main() -> eframe::Result<()> {
    // 配置原生窗口参数
    let options = eframe::NativeOptions::default();
    let mut onoff = false;      // 选择框的值
    let mut undwond = false;    // 选择框的值
    let mut high_low = false;   // 选择框的值
    eframe::run_simple_native("菜单", options, move |ctx, _frame| {
        egui::CentralPanel::default().show(ctx, |ui| {
            load_fonts(&ctx);
            ui.menu_button("菜单", |ui| {              // 一级菜单
                ui.menu_button("选择", |ui| {          // 二级菜单
                    ui.checkbox(&mut onoff, "onoff");       // 复选框
                    ui.checkbox(&mut undwond, "undwond");   // 复选框
                    ui.checkbox(&mut high_low, "high_low"); // 复选框
                })
            })
        });
    })
}

二、右键菜单context_menu

rust 复制代码
 ui.button("鼠标右键点击").context_menu(|ui| {
     ui.menu_button("按钮的右键菜单", |ui| {
         ui.menu_button("子菜单", |ui| {});
     });
});

ui.label("鼠标右键点击").context_menu(|ui| {
    ui.menu_button("标签的右键菜单", |ui| {});
})