丹青幻境Streamlit UI定制教程:仿宣纸纹理+宋体排版+留白呼吸感实现方法

张开发
2026/4/15 20:13:10 15 分钟阅读

分享文章

丹青幻境Streamlit UI定制教程:仿宣纸纹理+宋体排版+留白呼吸感实现方法
丹青幻境Streamlit UI定制教程仿宣纸纹理宋体排版留白呼吸感实现方法你有没有想过一个AI绘画工具的界面可以不像冰冷的代码编辑器而更像一张铺开的宣纸一支待蘸的毛笔今天我们就来拆解“丹青幻境”这个项目的UI设计看看如何用Streamlit打造一个充满东方美学意境的数字画室。我们将一步步实现仿宣纸纹理、宋体排版和留白呼吸感让你也能为自己的AI应用注入独特的灵魂。1. 为什么需要“有温度”的界面在开始动手之前我们先聊聊为什么。大多数AI工具的界面无论是WebUI还是Gradio都带着浓厚的“工具感”和“科技感”。按钮、滑块、输入框功能至上效率优先。这当然没错但对于一个创作型应用尤其是像AI绘画这样充满艺术可能性的工具用户体验的“氛围感”同样重要。“丹青幻境”的出发点就是希望将4090显卡的强大算力包裹在一层温润的东方美学外壳之下。它想让用户感觉不是在“运行一个模型”而是在“铺纸研墨准备作画”。这种沉浸感能极大地激发创作灵感让技术本身退居幕后让艺术表达走向台前。要实现这种转变UI设计的三个核心要素就是质感宣纸纹理、字体宋体排版和空间留白呼吸感。接下来我们就从零开始逐一实现。2. 环境准备与项目骨架首先确保你的Python环境已经安装了Streamlit。我们所有的UI魔法都基于Streamlit的自定义CSS能力。pip install streamlit创建一个新的项目目录比如danqing_huanjing并在其中创建两个核心文件danqing_huanjing/ ├── app.py # Streamlit主应用文件 └── style.css # 自定义样式文件app.py将承载应用的主要逻辑和布局而style.css则是我们施展美学魔法的画布。我们先搭建一个最简单的Streamlit应用骨架。# app.py import streamlit as st st.set_page_config( page_title丹青幻境, page_icon, layoutwide, initial_sidebar_stateexpanded ) # 应用标题 st.title( 丹青幻境 · Z-Image Atelier) st.markdown( **“见微知著凝光成影。执笔入画神游万象。”**) # 后续的UI组件将在这里添加 st.write(这里是未来的画室...)运行streamlit run app.py你就能看到一个最基础的Streamlit页面了。现在让我们为它穿上第一层“外衣”——宣纸纹理。3. 核心技法一注入仿宣纸纹理与底色宣纸的质感关键在于微妙的纹理和暖黄的底色。我们通过自定义CSS为整个页面背景施加这种效果。在style.css文件中我们开始创作/* style.css */ /* 1. 定义宣纸底色与纹理 */ :root { --xuan-paper-light: #f8f4e9; /* 仿古宣纸基色偏暖黄 */ --xuan-paper-dark: #e8dfca; /* 略深的宣纸阴影色 */ --ink-black: #2c2c2c; /* 墨色非纯黑更有质感 */ --seal-red: #c53d3d; /* 朱砂印泥红 */ } /* 2. 主页面背景 - 宣纸质感 */ .stApp { /* 基础底色 */ background-color: var(--xuan-paper-light); /* 关键叠加微妙的线性渐变模拟纸张纤维感 */ background-image: linear-gradient(90deg, transparent 79px, var(--xuan-paper-dark) 79px, var(--xuan-paper-dark) 81px, transparent 81px), linear-gradient(var(--xuan-paper-light) .1em, transparent .1em); background-size: 100% 1.2em; /* 控制“纸纹”的行距 */ background-attachment: fixed; color: var(--ink-black); font-family: Noto Serif SC, serif; /* 预加载字体下一节详解 */ } /* 3. 容器卡片 - 模拟小幅宣纸或笺纸 */ .card-paper { background-color: rgba(255, 253, 245, 0.85); /* 半透明白色叠加在背景上 */ border-radius: 2px; /* 极小的圆角模仿纸张边缘 */ border: 1px solid #e0d6bb; /* 浅棕色细边框像笺纸的毛边 */ padding: 1.5rem; margin-bottom: 1.5rem; box-shadow: 0 2px 8px rgba(140, 110, 70, 0.08); /* 极淡的阴影避免厚重 */ }这段CSS做了几件事定义色彩体系使用CSS变量方便全局管理“宣纸白”、“墨黑”、“朱砂红”等主题色。创造宣纸纹理核心在于background-image中的两个线性渐变。第一个模拟纸张纵向的细微纹理几乎看不见的竖线第二个模拟横向的、类似信纸的行线。background-size控制了这些纹理的密度。设计卡片容器UI中的各个功能区块如参数面板、生成区会用卡片承载。我们给卡片加上半透明底色、浅色细边框和极淡的阴影让它像一小张浮在背景宣纸上的笺纸。现在我们需要在app.py中引入这个CSS文件。# 在 app.py 的 st.set_page_config 之后添加以下代码 # 读取自定义CSS文件 def local_css(file_name): with open(file_name) as f: st.markdown(fstyle{f.read()}/style, unsafe_allow_htmlTrue) local_css(style.css) # 使用我们定义的卡片样式 with st.container(): # 使用HTML div配合自定义class因为Streamlit原生组件class不易覆盖 st.markdown(div classcard-paper, unsafe_allow_htmlTrue) st.header(画意描述) prompt st.text_area(在此倾诉你的灵感..., height100, placeholder例如一袭青衣仗剑天涯的侠客立于竹海之巅月色如水。) st.markdown(/div, unsafe_allow_htmlTrue)刷新页面你应该能看到背景已经变成了带有细微纹理的暖黄色并且文本框区域有了一个雅致的卡片效果。质感初现4. 核心技法二引入宋体排版与字体层次字体是界面气质的直接体现。我们选择“思源宋体”Noto Serif SC作为主字体因为它开源、免费且中文字形优美富有书卷气。我们需要通过Google Fonts在线引入并在CSS中定义一套完整的字体使用规则。/* 在 style.css 文件顶部添加 */ /* 从 Google Fonts 引入思源宋体 */ import url(https://fonts.googleapis.com/css2?familyNotoSerifSC:wght200;300;400;500;600;700;900displayswap); /* 4. 全局字体与排版系统 */ body, .stApp { font-family: Noto Serif SC, serif; font-weight: 400; /* 常规粗细 */ line-height: 1.8; /* 较大的行高创造呼吸感的关键 */ } /* 5. 标题层级 - 模仿古籍排版 */ h1 { font-weight: 700; font-size: 2.5rem; margin-top: 2rem; margin-bottom: 1.5rem; border-bottom: 2px solid var(--seal-red); /* 标题下加一道朱砂红细线 */ padding-bottom: 0.5rem; text-align: center; } h2 { font-weight: 600; font-size: 1.8rem; margin-top: 1.8rem; margin-bottom: 1rem; color: var(--ink-black); } h3 { font-weight: 500; font-size: 1.3rem; margin-top: 1.5rem; margin-bottom: 0.8rem; font-style: italic; /* 三级标题可用斜体增加变化 */ } /* 6. 正文与特殊文本 */ p { margin-bottom: 1em; /* 段落间距 */ text-align: justify; /* 两端对齐更显工整 */ } /* 引用块样式 - 模仿竖排古籍的批注 */ blockquote { border-left: 4px solid var(--seal-red); padding-left: 1.5rem; margin-left: 0; font-style: italic; color: #666; } /* 7. Streamlit 原生组件字体覆盖 (需要更具体的选择器) */ .stTextInput div div input, .stTextArea div div textarea, .stSelectbox div div select, .stButton button { font-family: Noto Serif SC, serif !important; font-size: 1rem; }字体排版系统的要点行高line-height设置为1.6到1.8这是创造“呼吸感”最重要的技巧之一。紧凑的行距会让人感到压抑宽松的行距则让文本舒展开来如同宣纸上的留白。标题装饰为h1标题加上底部边框并用主题色朱砂红点缀瞬间有了章回体小说或古籍封面的感觉。组件字体覆盖Streamlit的输入框、按钮等组件有默认字体需要用!important和更具体的选择器强制覆盖保证视觉统一。5. 核心技法三营造留白呼吸感的布局策略留白是中国书画艺术的精髓。在UI中留白意味着合理的间距、宽松的布局和对内容的“敬畏”。我们通过调整Streamlit容器的边距、内衬和组件的排列来实现。/* 在 style.css 中继续添加 */ /* 8. 布局与留白系统 */ .main .block-container { padding-top: 2rem; padding-bottom: 5rem; /* 底部大量留白 */ max-width: 1000px; /* 限制最大宽度避免内容撑满屏幕 */ } /* 侧边栏样式 */ section[data-testidstSidebar] div { background-color: rgba(248, 244, 233, 0.9); /* 侧边栏也用宣纸色但稍透 */ padding-top: 2rem; border-right: 1px solid #e0d6bb; } section[data-testidstSidebar] .stButton button { width: 100%; /* 按钮占满侧边栏宽度更规整 */ margin-bottom: 0.5rem; } /* 9. 按钮美学改造 */ .stButton button { background-color: var(--seal-red) !important; color: white !important; border: none !important; border-radius: 2px !important; /* 方形微圆角 */ padding: 0.5rem 2rem !important; font-weight: 500 !important; transition: all 0.2s ease-in-out !important; } .stButton button:hover { background-color: #a83232 !important; /* 悬停时颜色加深 */ box-shadow: 0 4px 12px rgba(197, 61, 61, 0.3) !important; } /* 10. 输入框与选择框 */ .stTextInput div div input, .stTextArea div div textarea { border: 1px solid #d0c6ab !important; border-radius: 2px !important; background-color: rgba(255, 255, 255, 0.7) !important; } .stTextArea div div textarea:focus, .stTextInput div div input:focus { border-color: var(--seal-red) !important; box-shadow: 0 0 0 1px var(--seal-red) !important; }布局策略解析限制宽度通过max-width限制主内容区的宽度在宽屏上两侧会自动形成留白内容不会无限拉伸导致阅读疲劳。增加内边距在容器顶部、底部和内部元素之间增加足够的padding和margin。特别是底部留白让页面有“落地”的感觉而不是戛然而止。侧边栏融合将侧边栏的背景色设置为与主背景协调的半透明色并用细线分隔使其成为画布延伸的一部分而非突兀的控件面板。组件微调将按钮、输入框的直角改为极小的圆角2px更符合东方审美中“方中有圆”的哲学。同时为交互状态悬停、聚焦添加平滑过渡和优雅的反馈。6. 整合与实战构建“丹青幻境”主界面现在让我们把所有的CSS魔法应用到app.py的完整布局中。我们将构建一个包含侧边栏参数设置和主画布区的经典布局。# app.py 完整示例精简版逻辑聚焦UI import streamlit as st st.set_page_config(page_title丹青幻境, page_icon, layoutwide) # 注入自定义CSS def local_css(file_name): with open(file_name) as f: st.markdown(fstyle{f.read()}/style, unsafe_allow_htmlTrue) local_css(style.css) # --- 侧边栏参数设置“画规”--- with st.sidebar: st.markdown(### 历练卷轴) lora_option st.selectbox(选择修行火候, [初窥门径 (基础), 略有小成 (平衡), 炉火纯青 (精细)]) st.markdown(### 画布规制) col1, col2 st.columns(2) with col1: width st.slider(幅宽, 512, 1024, 768, step64) with col2: height st.slider(纵深, 512, 1024, 768, step64) guidance_scale st.slider(灵感契合度, 1.0, 20.0, 7.5, step0.5) steps st.slider(修行步数, 20, 100, 50) seed st.number_input(机缘 (Seed), value42, help冥冥之中的造化留空则随机) st.markdown(---) if st.button( 挥毫泼墨, typeprimary, use_container_widthTrue): # 此处应触发图像生成逻辑 st.session_state[generate] True if st.button( 清空画意, use_container_widthTrue): st.session_state[prompt] # --- 主画布区 --- st.title( 丹青幻境 · Z-Image Atelier) st.markdown( **“见微知著凝光成影。执笔入画神游万象。”**) # 使用自定义卡片容器组织内容 st.markdown(div classcard-paper, unsafe_allow_htmlTrue) col_left, col_right st.columns([3, 2]) with col_left: st.header(️ 画意描述) prompt st.text_area( 在此勾勒心中所想..., height150, valuest.session_state.get(prompt, ), placeholder一袭青衣仗剑天涯的侠客立于竹海之巅月色如水。远处有孤雁飞过。 ) st.session_state[prompt] prompt with col_right: st.header( 避讳) negative_prompt st.text_area( 除去画中冗余..., height150, value低质量模糊畸变多余的手指丑陋文字水印, placeholder写下不愿见到的尘杂。 ) st.markdown(/div) # 关闭卡片 # 图像展示区 st.markdown(div classcard-paper, unsafe_allow_htmlTrue) st.header(️ 生成画卷) image_placeholder st.empty() if st.session_state.get(generate, False): # 模拟生成过程 with st.spinner(朱砂研磨中请静候...): # time.sleep(2) # 模拟耗时 # 此处应调用模型生成图像并显示在image_placeholder # image_placeholder.image(generated_image, caption您的丹青) st.success(画卷已成) st.session_state[generate] False else: st.info(请于左侧设定规制并点击「挥毫泼墨」开始创作。) st.markdown(/div) # 底部信息 st.markdown(---) st.caption(画意之外皆为云烟。 // 见微知著)运行这个应用一个充满东方美学意境的AI绘画界面就诞生了。从宣纸背景、宋体文字到舒朗的布局和朱砂红的点缀每一个细节都在共同营造那个名为“丹青幻境”的沉浸式创作空间。7. 总结通过这个教程我们完成了从“功能界面”到“意境画室”的转变。关键点总结如下质感是基础通过CSS渐变背景模拟宣纸纹理定义了--xuan-paper-light、--ink-black等主题色系奠定了整体的视觉基调。字体是气质引入并使用“思源宋体”作为全局字体通过调整字重、大小和行高尤其是1.8的行高构建了具有古籍感的排版层次这是“呼吸感”的核心来源。留白是灵魂通过限制容器宽度、增加内边距padding、调整元素间距margin有意识地在页面中创造“空”的区域。这让内容得以“呼吸”减轻了信息密度带来的压迫感。细节是匠心对按钮、输入框、侧边栏等Streamlit原生组件进行细致的美化统一圆角、边框和交互状态确保整个体验的和谐一致。这种UI设计思路的价值远不止于美观。它通过环境暗示将用户的心境从“操作工”引导至“创作者”降低了技术工具的认知门槛提升了创作过程的愉悦感和仪式感。你可以将这套方法应用到任何需要营造特定氛围的Streamlit应用中无论是国学教育、传统艺术展示还是文化类工具都能让界面自己“说话”。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章