Rust语言之egui库窗口中组件与布局结合案例(5)

案例(1):输入框与按钮水平,标签垂直

输入代码:

//按钮、标签、输入框学习
use eframe::egui;

fn main() -> eframe::Result<()> {
    let options = eframe::NativeOptions::default();
    
    let mut edit_text:String = String::new();
    let mut texts:Vec<String> = Vec::new();

    eframe::run_simple_native("My egui App", options, move |ctx, _frame| {
        egui::CentralPanel::default().show(ctx, |ui| {
            //添加UI组件区
            //给输入框、按钮、label添加布局
            //水平布局
            ui.horizontal(|ui|{
                ui.text_edit_singleline(&mut edit_text);

                //使用if添加事件机制
                if ui.button("Add").clicked(){
                    texts.push(edit_text.clone());
                    edit_text.clear();
                }
            });
            //垂直布局
            ui.vertical(|ui|{
                for text in &texts{
                    ui.label(text);
                }
            });
        });
	})
}

显示:

案例(2):输入框与按钮水平,标签后添加删除按钮事件

输入代码:

//按钮、标签、输入框学习
use eframe::egui;

fn main() -> eframe::Result<()> {
    let options = eframe::NativeOptions::default();
    
    let mut edit_text:String = String::new();
    let mut texts:Vec<String> = Vec::new();

    eframe::run_simple_native("My egui App", options, move |ctx, _frame| {
        egui::CentralPanel::default().show(ctx, |ui| {
            //添加UI组件区
            //给输入框、按钮、label添加布局
            //水平布局
            ui.horizontal(|ui|{
                
                //输入框的另外添加方式
                //使用这种方式可以调佣更多的方法和功能
                ui.add(egui::TextEdit::singleline(&mut edit_text).hint_text("please input text"));
                //ui.text_edit_singleline(&mut edit_text);

                //使用if添加事件机制
                if ui.button("Add").clicked(){
                    texts.push(edit_text.clone());
                    edit_text.clear();
                }
            });
            //添加删除按钮
            let mut todel=None;
            ui.vertical(|ui|{
                //在这里可以处理每个文本和其对应的索引
                for (dix,text) in texts.clone().iter().enumerate(){
                    //标签与按钮水平放置
                    ui.horizontal(|ui|{
                        ui.label(text);
                        if ui.button("del").clicked(){
                            //记录要删除的下标
                            todel = Some(dix);
                        }
                    });
                }
                if let Some(ttodel)=todel{
                    texts.remove(ttodel);
                }
            });
        });
	})
}

显示:

案例(3):控件鼠标悬浮提示

输入代码:

//控件鼠标悬浮提示
use eframe::egui;

fn main() -> eframe::Result<()> {
    let options = eframe::NativeOptions::default();
    
    let mut edit_text:String = String::new();
    let mut texts:Vec<String> = Vec::new();

    eframe::run_simple_native("My egui App", options, move |ctx, _frame| {
        egui::CentralPanel::default().show(ctx, |ui| {
            //添加UI组件区
            //给输入框、按钮、label添加布局
            //水平布局
            ui.horizontal(|ui|{
                
                //egui中许多控件都可以使用tooltip提示方法
                ui.add(egui::TextEdit::singleline(&mut edit_text).hint_text("please input text")).on_hover_text("this is textedit");

                //使用if添加事件机制
                if ui.button("Add").on_hover_text("this is button").clicked(){
                    texts.push(edit_text.clone());
                    edit_text.clear();
                }
            });
            //添加删除按钮
            let mut todel=None;
            ui.vertical(|ui|{
                //在这里可以处理每个文本和其对应的索引
                for (dix,text) in texts.clone().iter().enumerate(){
                    //标签与按钮水平放置
                    ui.horizontal(|ui|{
                        ui.label(text).on_hover_text("this is label");
                        if ui.button("del").clicked(){
                            //记录要删除的下标
                            todel = Some(dix);
                        }
                    });
                }
                if let Some(ttodel)=todel{
                    texts.remove(ttodel);
                }
            });
        });
	})
}

显示:

案例(4):控件浮窗

输入代码:

//控件浮窗悬浮
use eframe::egui;

fn main() -> eframe::Result<()> {
    let options = eframe::NativeOptions::default();
    
    let mut edit_text:String = String::new();
    let mut texts:Vec<String> = Vec::new();

    eframe::run_simple_native("My egui App", options, move |ctx, _frame| {
        egui::CentralPanel::default().show(ctx, |ui| {
            //这是控件提示
            ui.button("OK").on_hover_text("here");
            //控件浮窗,可以展示更多内容
            ui.button("OK").on_hover_ui(|ui|{
                for idx in 0..10 {
                    ui.label(idx.to_string());
                }
            });
        });
	})
}

显示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值