xlui

Crates.ioxlui
lib.rsxlui
version0.2.2
created_at2025-08-04 05:08:11.769009+00
updated_at2025-09-13 17:46:17.441343+00
descriptionRust GUI库
homepage
repositoryhttps://github.com/xllgl2017/xlui
max_upload_size
id1780308
size834,794
(xllgl2017)

documentation

README

🚀logo xlui:

github Latest version Documentation Apache

     xlui是一个用Rust语言,基于原生窗口和wgpu实现的2D GUI库。 目标是利用Rust语言原生构建GUI、最小第三方依赖、体积小(比winit+wgpu少50%左右)、简单易用, 在保证性能的前提下尽量减少CPU的开销。

xlui的目标

适配情况 目标系统 平台UI 备注
Linux x11,wayland x11为原生窗口
Windows 10,11 原生窗口
⬜️ MacOS - winit
⬜️ Android 11+ winit
⬜️ Web Wasm winit
HarmonyOS 暂无适配计划

🎯控件(目前可用)

控件状态

快速开始xlui

xlui的最小运行示例

use xlui::*;

fn main() {
    let app=XlUiApp::new();
    //直接调run()
    app.run().unwrap();
}

struct XlUiApp {
    status:String,
    count: i32,
}


impl XlUiApp {
    fn new()->XlUiApp{
        XlUiApp{
            count: 0,
            status:"这里是Label".to_string()
        }
    }
    fn add(&mut self,_:&mut Button,ui: &mut Ui){
        self.count += 1;
        self.status=format!("count: {}", self.count);
    }

    fn reduce(&mut self,_:&mut Button,ui: &mut Ui){
        self.count-=1;
        self.status=format!("count: {}", self.count);
    }
}

//实现App trait
impl App for XlUiApp {
    fn draw(&mut self, ui: &mut Ui) {
        ui.add(Label::new("hello").with_id("status"));
        ui.horizontal(|ui| {
            ui.add(Button::new("+").width(30.0).height(30.0).connect(Self::add));
            ui.add(Button::new("-").width(30.0).height(30.0).connect(Self::reduce));
        });
    }

    fn update(&mut self, ui: &mut Ui) {
        let status:&mut Label=ui.get_widget("status").unwrap();
        status.set_text(&self.status);
    }


    fn window_attributes(&self) -> WindowAttribute {
        WindowAttribute{
            inner_size:(800,600).into(),
            ..Default::default()
        }
    }
}

详细用法,参考Wiki

Commit count: 354

cargo fmt