【xilem0.4基础语法学与练】第32课 prose 可选择文本
前言参考官方文档https://docs.rs/xilem/latest/xilem/view/fn.prose.html版本Xilem 0.4一、prose基础概念prose 是可鼠标选中复制的段落文本组件。label 文本不可选中复制prose支持鼠标拖拽选中文本、CtrlC复制适合日志、输出内容、大段正文、展示需要拷贝的信息。label静态展示不可选中复制简短标题/提示文字prose段落正文支持选中文本复制适合日志、长文本输出官方描述 A view which displays selectable text. 用于展示可选择文本的View二、函数签名pubfnprose(content:implIntoArcStr)-Prose参数说明content: impl Into 传入字符串、 String 、 str 、 format!() 格式化字符串都可以内部转为 ArcStr 高效共享字符串。返回值 Prose 视图可放入 flex_col/flex_row 支持链式修饰.text_alignment(TextAlign::Center) 设置文本对齐.text_size(f64) 设置字号大小三、最简基础用法// 普通字符串prose(这是一段可以鼠标选中复制的正文文字)// format格式化动态文本prose(format!(计数{},state.counter))// 设置居中、字号prose(居中大段文字).text_alignment(TextAlign::Center).text_size(18.0)四、官方示例解读文档源码示例1展示历史日志 state_machine.rsflex_col((text_button(Reset,|app_data:mutStateMachine|{app_data.history.clear();app_data.stateIsEven::Initial;}),prose(*app_data.history),// history字符串可选中复制日志label(format!(Current state: {:?},app_data.state)),))业务场景日志输出用户可以选中日志文本复制出来。示例2动态列表 lists.rsletlist(0..state.count).map(|n|prose(format!(item #{n}))).collect::Vec_();flex_col((text_button(more,|appstate:mutAppState|appstate.count1),list,// VecProse直接放入flex子项动态生成多条可复制文本));关键点prose 可以在 .map() 中批量生成收集为Vec直接作为flex布局子节点。五、完整可运行demoCargo.toml[package] name xilem_lesson32_prose version 0.1.0 edition 2021 [dependencies] xilem 0.4.0 winit 0.30src/main.rsusexilem::winit::error::EventLoopError;usexilem::view::{prose,text_button,label};usexilem::{EventLoop,TextAlign,WidgetView,WindowOptions,Xilem};#[derive(Default)]structAppState{log_content:String,count:i32,}fnapp_logic(state:mutAppState)-implWidgetViewAppStateuse{flex_col((label(第32课 prose可选中复制的文本),prose(鼠标拖动选中我按下CtrlC复制这段文字).text_alignment(TextAlign::Center).text_size(17.0),text_button(追加日志,|s:mutAppState|{s.count1;s.log_content.push_str(format!(日志行 {}\n,s.count));}),text_button(清空日志,|s:mutAppState|{s.log_content.clear();}),// 大段日志支持选中复制全部日志内容prose(s.log_content),)).padding(12.0)}fnmain()-Result(),EventLoopError{letappXilem::new_simple(AppState::default(),app_logic);app.run(EventLoop::with_user_event(),WindowOptions::default())}六、高频踩坑清单✅ label 不能复制需要复制文本必须用prose。prose 接收 str / String / format!() 内部自动转换 ArcStr 无需手动转换。prose 支持换行符 \n 自动换行展示大段文本。可以把 prose 收集到 Vec 中直接作为flex布局子元素实现动态列表渲染。0.4版本prose支持 .text_size() 、 .text_alignment() 链式方法不支持直接设置文字颜色底层View层API尚未开放颜色修改接口。prose仅选中文本复制不支持编辑需要输入编辑文本用 text_input 组件。七、课后练习题 标准答案 逐行解读练习1基础需求界面显示两段文本一段label一段prose。体验两者区别prose可以鼠标选中复制label不可选中。参考答案flex_col((label(这是label文本无法选中复制),prose(这是prose文本鼠标拖动可以选中CtrlC复制),))详细解读label 普通展示标签文本仅用于显示没有文本选择交互。prose 底层开启文本选择能力鼠标拖拽可以框选全部或部分文字系统剪贴板复制。适合场景输出日志、错误信息、密钥、需要让用户拷贝的内容。练习2进阶需求点击按钮往state.history追加一行记录使用 prose 展示全部历史记录支持复制全部历史文本设置字号16左对齐。参考答案#[derive(Default)]structAppState{history:String,idx:i32,}fnapp_logic(state:mutAppState)-implWidgetViewAppStateuse{flex_col((text_button(新增一条记录,|s:mutAppState|{s.idx1;s.history.push_str(format!(记录 No.{}\n,s.idx).as_str());}),text_button(清空记录,|s:mutAppState|{s.history.clear();s.idx0;}),prose(state.history).text_size(16.0).text_alignment(TextAlign::Start),))}详细解读history:String 存储全部多行日志 \n 实现换行。prose(state.history) 绑定状态字符串状态更新自动刷新显示。.text_size(16.0) 修改字号 .text_alignment(TextAlign::Start) 左对齐。用户可以鼠标框选全部日志Ctrl‑C复制全部输出内容。练习3拓展需求动态列表点击按钮增加条目使用 .map 生成多条 prose 收集为Vec放入flex布局每一条都可以独立选中复制。参考答案#[derive(Default)]structAppState{item_count:usize,}fnapp_logic(state:mutAppState)-implWidgetViewAppStateuse{letitems:Vec_(0..state.item_count).map(|i|prose(format!(列表条目 #{},i1))).collect();flex_col((text_button(增加条目,|s:mutAppState|s.item_count1),text_button(清空条目,|s:mutAppState|s.item_count0),items,))}详细解读通过 (0…state.item_count).map 迭代生成多条prose视图。.collect::Vec_() 收集视图集合flex布局支持直接嵌入Vec作为子节点。每一条 prose 都是独立可选中复制适合动态输出多条结果。思考题问题同样都是显示文字什么时候用label什么时候用prose标准答案解读label标题、简短提示、UI标签不需要复制文本轻量无选择交互。prose日志、输出结果、密钥、正文段落用户有复制文本的需求支持鼠标选中文本。prose会开启文本选择底层逻辑有微小性能开销简单标题优先选择label。八、知识点总结prose(content) 生成可鼠标选中复制的文本视图 label 文本不可复制二者分工明确。参数支持 str 、 String 、 format!() 格式化字符串内部自动转为 ArcStr 。链式修饰 .text_size() 字号、 .text_alignment() 对齐0.4版本暂不支持设置文字颜色。支持换行符 \n 展示多行大段文本可以 .map 批量生成收集为Vec用于动态列表。prose仅用于展示不可编辑需要输入框请使用 text_input 。典型业务场景日志窗口、错误输出、展示密钥、输出报告允许用户复制内容。

相关新闻

软件测试基础全解析:从用例设计到缺陷管理的完整路径

软件测试基础全解析:从用例设计到缺陷管理的完整路径

干这行这么多年,经常被问到一句话:"软件测试基础篇这东西,是不是就学学怎么点点点?" 说实话,我入行前也是这么以为的,以为测试就是照着用例点按钮、提bug、催开发修。真正在项目里滚过几轮之后才…

2026/10/12 5:30:14 阅读更多 →
Paperclip 与 OpenClaw 互相成就:智能体「运行时 + 编排」生态成型记

Paperclip 与 OpenClaw 互相成就:智能体「运行时 + 编排」生态成型记

Paperclip 与 OpenClaw 互相成就:智能体「运行时 编排」生态成型记 【免费下载链接】paperclip The open-source app everyone uses to manage agents at work 项目地址: https://gitcode.com/GitHub_Trending/papercl/paperclip 2026 年,开源智…

2026/10/12 5:30:14 阅读更多 →
Adobe认证报考全流程指南:从报名到拿证一次讲透

Adobe认证报考全流程指南:从报名到拿证一次讲透

做设计这行,Adobe认证是常被问起的一个东西。不管是刚毕业的学生、想转行的职场新人,还是已经在接私活的自由设计师,总会有人来问:这套认证到底怎么考、怎么报名、多久能拿证、证书有没有用。我前前后后帮团队里几个新人梳理过整套…

2026/10/12 5:29:14 阅读更多 →

最新新闻

Tortoise-ORM 与 Sanic 集成实战:register_tortoise 生命周期管理全解析

Tortoise-ORM 与 Sanic 集成实战:register_tortoise 生命周期管理全解析

数据库后端 【免费下载链接】tortoise-orm Familiar asyncio ORM for python, built with relations in mind 项目地址: https://gitcode.com/gh_mirrors/to/tortoise-orm 点击查看 免费下载 本文以 Tortoise-ORM 仓库中 Sanic 集成示例 为主线,系统讲解…

2026/10/12 6:02:32 阅读更多 →
从ABP到Clean DDD:中后台系统架构迁移实践与反思

从ABP到Clean DDD:中后台系统架构迁移实践与反思

做中后台和SaaS类系统的团队,大概率都绕不开 ABP 这个名字。它把模块化、仓储模式、工作单元、动态 API、审计日志、多租户这些东西一次性打包成开箱即用的起点,用 .NET 技术栈做内部系统,几乎第一天就能跑起来。我所在的团队也是这样起步的&…

2026/10/12 6:02:32 阅读更多 →
STM32 | CLion + ST-Link下载调试完整流程

STM32 | CLion + ST-Link下载调试完整流程

一、下载程序 先创建一个文件夹: 命名:stlink.cfg 写入以下代码: # choose st-link/j-link/dap-link etc. #adapter driver cmsis-dap #transport select swdsource [find interface/stlink.cfg]transport select hla_swdsource [find target/stm32f4x.…

2026/10/12 6:02:32 阅读更多 →
Python代码打包成exe文件详解

Python代码打包成exe文件详解

一、pyhon代码打包成exe文件1-1:安装打包工具在PyCharm底部的 终端(Terminal) 里输入:pip install pyinstaller1-2:输入打包命令在同一个终端里输入(直接复制):pyinstaller --onefile --noconsole --hidden…

2026/10/12 6:02:32 阅读更多 →
知识工作插件化:从信息捕获到配置同步的效率体系

知识工作插件化:从信息捕获到配置同步的效率体系

平时做知识工作,最耗时间的往往不是思考本身,而是信息的搬运。你从网页摘一段话,粘贴进笔记里,格式全乱;你复制了一段关键论述,过了几天想找来源,翻遍聊天记录和文档都找不到;你给十…

2026/10/12 6:02:32 阅读更多 →
DJL与Spring集成:Java后端部署深度学习模型的实践指南

DJL与Spring集成:Java后端部署深度学习模型的实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 6:01:32 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →