You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust fltk开发:选中菜单项后Group组件无法显示问题求助

问题原因

你代码里的Group无法显示是三个常见的fltk-rs使用错误导致的:

  • 你在Wallets分支内创建的wall_group是局部变量,分支执行完成后变量生命周期结束直接被销毁,自然不会显示在界面上
  • 你在添加子组件之前就调用了wall_group.end(),fltk的Group调用end()后就会关闭组件添加状态,后续调用add()方法不会生效
  • 动态添加完组件后没有主动触发窗口重绘,界面不会更新新增的内容

修复方案

  1. 不要在消息循环的分支内创建局部界面组件,建议在窗口初始化阶段就提前创建所有需要的Group,默认设置为隐藏状态,收到对应菜单消息时再把目标Group设置为显示、其他无关Group设置为隐藏即可,也可以用智能指针持有Group的所有权避免被提前销毁
  2. 调整Group的操作顺序:创建Group后默认处于begin()状态,直接添加所有子组件,全部添加完成后再调用end()
  3. 切换Group显示状态后调用主窗口的redraw()方法刷新界面

示例调整后的核心代码:

// 窗口初始化阶段提前创建所有Group,设置为隐藏
let mut wall_group = fltk::group::Group::new(50, 90, 500, 300, "Wallet Data Add/Change/Delete");
wall_group.set_frame(FrameType::FlatBox);
wall_group.set_color(Color::by_index(2));
let wall_name = fltk::input::Input::new(180, 105, 170, 20, "Wallet Name:");
let wall_username = fltk::input::Input::new(180, 130, 170, 20, "Wallet Username:");
let wall_password = fltk::input::Input::new(180, 155, 170, 20, "Wallet Password:");
let btn_wall_add = fltk::button::Button::new(180, 190, 60, 20, "Add");
let btn_wall_delete = fltk::button::Button::new(260, 190, 60, 20, "Delete");
wall_group.end();
wall_group.hide(); // 默认隐藏

main_win.show();
main_win.set_callback(move|_| {
    if app::event() == Event::Close {
        s.send(Message::Quit);
    }
});

while app.wait() {
    use Message::*;
    if let Some(msg) = r.recv() {
        match msg {
            Preference => {
                println!("In Preference area");
                // 隐藏其他Group,显示偏好设置对应的Group
            }
            Quit => {
                app.quit();
            }
            Wallets => {
                println!("In Wallets area");
                wall_group.show();
                main_win.redraw(); // 主动刷新界面
            }
        }
    }
}

学习资料推荐

可以直接看fltk-rs官方自带的示例代码库,里面包含了多场景切换、多线程消息通信、菜单联动等各类场景的实现示例,覆盖了你当前的使用需求,另外官方文档里也对Group、消息循环等核心组件的使用规则做了详细说明。


内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:36:01