【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading

这篇具有很好参考价值的文章主要介绍了【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说在前面

  • rust新手,egui没啥找到啥教程,这里自己记录下学习过程
  • 环境:windows11 22H2
  • rust版本:rustc 1.71.1
  • egui版本:0.22.0
  • eframe版本:0.22.0
  • 上一篇:这里

SidePanel

  • 侧边栏,如下图
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端

  • 其定义为:

    pub struct SidePanel {
    	side: Side,
    	id: Id,
    	frame: Option<Frame>,
    	resizable: bool, 
    	show_separator_line: bool, // 是否显示边框
    	default_width: f32, // 默认宽度
    	width_range: RangeInclusive<f32>, // 宽度范围
    }
    
  • 通过right()left()方法生成:

    egui::SidePanel::right("panel_name")
    

    方法实现与TopBottomPanel::top()类似:

    pub fn right(id: impl Into<Id>) -> Self {
    	// id需要保证全局唯一
        Self::new(Side::Right, id)
    }
    

    生成时的默认属性值为:

    pub fn new(side: Side, id: impl Into<Id>) -> Self {
        Self {
            side,
            id: id.into(),
            frame: None,
            resizable: true,
            show_separator_line: true,
            default_width: 200.0,
            width_range: 96.0..=f32::INFINITY,
        }
    }
    
  • 我们可以将app.rs中的egui::SidePanel::left("side_panel")改成right()看下效果:
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端

  • 然后让我们来看看SidePanel的其他属性

  • resizable
    默认值为true,效果如下图 (但是为啥会变回去?而且不丝滑)
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端
    右侧边栏的效果有点奇怪:
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端

    设置为false后,宽度将不可变:

    egui::SidePanel::left("side_panel").resizable(false).show
    

    注意,只有在panel中有一些需要占用空间的元素时,resizable才有效,例如只保留:

    egui::SidePanel::left("side_panel").default_width(100.0).show(ctx, |ui| {
        ui.heading("Side Panel");      
    });
    

    这个时候其实无法拖拽边框:
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端

  • show_separator_line
    默认值为true,修改为false后的表现为:

    egui::SidePanel::right("side_panel").show_separator_line(false).show(
    

    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端
    效果不是很明显,因为CentralPanel也有边框,并且没找到方法去掉

  • default_width
    默认值200.0,可通过default_width()方法进行修改:

    pub fn default_width(mut self, default_width: f32) -> Self {
    	// 修改self.default_width
        self.default_width = default_width; 
        // 依照default_width调整self.width_range
        // 例如default_width为200,那么结果依旧为96~inf
        // 例如default_width为80,那么结果为80~inf
        self.width_range = self.width_range.start().at_most(default_width)
            ..=self.width_range.end().at_least(default_width);
        self
    }
    

    (但是实际上没有用,不知道为啥)

Ui::heading()

  • 大号的文字,标题
    /// Show large text.
    ///
    /// Shortcut for `ui.label(RichText::new(text).heading())`
    pub fn heading(&mut self, text: impl Into<RichText>) -> Response {
        Label::new(text.into().heading()).ui(self)
    }
    
  • 我们也可以使用ui.label(RichText::new(text).heading())来自定义,例如:
    ui.label(egui::widget_text::RichText::new("Side Panel").heading()
    	.color(Color32::GREEN));
    
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端

CentralPanel

  • 主面板(panel),窗口中未被其他panel占用的部分。
  • CentralPanel必须在其他panel之后添加。否则其他panel将会覆盖CentralPanel
  • 以下是CentralPanelSidePanel之前添加的效果,可以看到有部分元素被挡住了:
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端
  • 可以看看不加CentralPanel的效果:
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端
  • CentralPanel没有可以自定义的属性

Panel之间的布局

  • 目前来看,eguipanel有三种:CentralSideTopBottom

  • panel的添加顺序是非常重要的,先添加的在最外层,后添加的在内层

  • 例如,在我们的template中,添加顺序是TopBottomSideCentral,其结果是:
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端

  • 如果改为SideTopBottomCentral,其结果为:
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端

  • 同时,一个窗口中panel可以不止3个,例如我们可以这样添加:TopBottomSideTopBottomCentral
    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading,Rust,rust,开发语言,后端

  • 如果想要将sidepanel拆分为上下两部分,是否可以实现,怎样实现呢?这部分留着后面探讨。文章来源地址https://www.toymoban.com/news/detail-674419.html

参考

  • richtext
  • sidepanel
  • centralpanel

到了这里,关于【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native

    rust新手,egui没啥找到啥教程,这里自己记录下学习过程 环境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:这里 首先让我们看看 main.rs 中有些什么 在 eframe 中使用的日志库为 log 以及 env_logger ,其日志等级有5个: 我们可以在main函数中添加测试一

    2024年02月13日
    浏览(42)
  • 【rust/egui】(一)从编译运行template开始

    rust新手,egui没啥找到啥教程,这里自己记录下学习过程 环境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 rust windows安装参考:这里 本文默认读者已安装相关环境(git、vscode等) egui github demo online 关于 immediate mode wikipedia microsoft learn 先 clone 下这个项目(也可

    2024年02月13日
    浏览(36)
  • RUST egui部署到github

    接上文,当用trunk serve编译部署后,工程目录下就会有一个dist目录,这个目录就是用来部署用的。 :) 创建一个github repo,这个repo的名称有固定格式要求,就是你自己的用户名+github.io,比如我的用户名是crazyskady,那么这个repo就叫crazyskady.github.io 部署就简单了,先把自己的

    2024年03月21日
    浏览(50)
  • Rust图形界面:从零开始创建eGUi项目

    egui系列:初步 首先,用cargo创建一个新项目,并添加eframe 尽管默认创建的项目只实现了输出Hello world功能,但添加了eframe库,所以下载需要一点时间。 创建成功后,直接把下面的代码写入main.rs文件中,这些代码来自egui的hello_world示例。 然后运行cargo run,结果如下所示 在e

    2024年02月01日
    浏览(61)
  • [Rust GUI]eframe(egui框架)代码示例

    你可以使用egui的其他绑定,例如:egui-miniquad,bevy_egui,egui_sdl2_gl 等。 egui库相当于核心库,需要借助eframe框架写界面。 eframe使用egui_glow渲染,而egui_glow需要opengl2.0+。 1、访问微软官网下载生成工具 2、勾选这个 3、对比勾选细节 4、点击安装 5、安装完成 6、关闭 Visual Studio

    2024年02月08日
    浏览(46)
  • 【rust/egui】(十)使用painter绘制一些图形—connections

    rust新手,egui没啥找到啥教程,这里自己记录下学习过程 环境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:这里 在上一节我们使用 painter 绘制了一个可以拖拽的小方块,现在我们来用 painter 将两个小方块连接起来,类似这种: 首先我们需要在我们

    2024年02月09日
    浏览(40)
  • 【Rust日报】2023-02-14 Rust GUI 框架对比: Tauri vs Iced vs egui

    Rust GUI 框架对比: Tauri vs Iced vs egui Tauri:使用系统的 webview 来渲染 HTML/JS 的前端。你可以选择任何前端框架。后台是用Rust编写的,可以通过内置的方法与前台通信。 Iced: 受 Elm 启发的(响应式)GUI库。在桌面上使用 wgpu 进行渲染;实验性的web后端创建DOM进行渲染。所有代码

    2024年02月02日
    浏览(34)
  • 【rust/egui】(八)使用panels给你的应用划分功能区块

    rust新手,egui没啥找到啥教程,这里自己记录下学习过程 环境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:这里 panel 是ui上的一块区域,比如我们打开CSDN的markdown编辑器,它大致上可以划分成四(五)块 (当然实际实现上这四块区域可能不是并列的

    2024年02月09日
    浏览(42)
  • 【rust/bevy】从game template开始

    操作系统:win11 rust版本:rustc 1.77.0-nightly bevy版本:0.12 rust安装 这里 windows 下建议使用 msvc 版本 bevy 安装 这里 clone代码 运行 结果 template中的例子是2d的,我们稍微修改下 首先增加一个 CameraController ,代码在 bevy 的例程中也可以找到 再添加一个 SceneSetup ,用于初始化场景和相

    2024年01月18日
    浏览(61)
  • Rust :mod.rs和lib.rs中use的作用

    一、mod.rs和lib.rs mod.rs往往是把同一目录下的n个rs文件综合在一起的有效方式; lib.rs是一个库或子库层次综合在一起的有效方式; 下面举个实例来说明。生成一个rusttoc本地库(由cargo new rusttoc --lib所生成),目录结构如下: 其中,data.rs文件内容如下: 其中,ffi.rs文件内容如

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包