代前导页的网站中国住房城乡建设部网站首页
代前导页的网站,中国住房城乡建设部网站首页,成都网站营销推广公司,sharepoint做网站AI语音工具颜值升级#xff1a;Streamlit主题定制详细步骤
1. 引言#xff1a;当AI语音工具穿上游戏皮肤
你有没有想过#xff0c;一个技术工具可以不只是工具#xff0c;还能是一场游戏#xff1f;
想象一下这样的场景#xff1a;你打开一个语音生成应用#xff0c;…AI语音工具颜值升级Streamlit主题定制详细步骤1. 引言当AI语音工具穿上游戏皮肤你有没有想过一个技术工具可以不只是工具还能是一场游戏想象一下这样的场景你打开一个语音生成应用迎接你的不是冰冷的参数面板和单调的按钮而是熟悉的红绿配色、像素风格的字体、跳跃的音效还有在屏幕底部巡逻的小乌龟。这不是某个复古游戏的重制版而是我们今天要改造的主角——Super Qwen Voice World超级千问语音设计世界。这个基于Qwen3-TTS构建的语音设计工具原本已经很有创意地采用了复古像素风。但今天我们要让它更进一步通过Streamlit的Theming API为它量身定制一套完整的马里奥主题皮肤。为什么要在UI上花这么多功夫因为好的界面设计能降低使用门槛把复杂的“语气描述”、“温度参数”变成“魔法威力”、“跳跃精准度”小白用户也能立刻明白怎么玩。提升使用乐趣从“完成任务”变成“闯关游戏”用户更愿意探索所有功能。强化品牌记忆独特的外观让人过目不忘下次还想回来玩。引导用户操作通过颜色、动画和布局自然地告诉用户下一步该做什么。如果你正在用Streamlit开发任何AI应用、数据分析工具或者单纯想给自己的项目换个酷炫的皮肤这篇文章就是你的实战手册。我会带你从零开始一步步把一个标准的Streamlit应用变成充满游戏感的马里奥主题世界。2. 环境准备启动你的语音设计世界在开始“装修”之前我们得先把“房子”建起来。别担心整个过程就像搭积木一样简单。2.1 获取项目代码首先你需要把Super Qwen Voice World的代码拿到手。打开你的命令行工具Windows用户可以用PowerShell或CMDMac/Linux用户用Terminal执行下面的命令# 克隆项目到你的电脑上 git clone https://github.com/your-repo/super-qwen-voice-world.git # 进入项目文件夹 cd super-qwen-voice-world如果你不熟悉git命令也可以直接去项目的GitHub页面点击“Download ZIP”按钮把压缩包下载到本地然后解压到一个你容易找到的文件夹里。2.2 安装必要的“装备”进入项目文件夹后你会看到一个叫requirements.txt的文件。这个文件就像一张“装备清单”列出了运行这个应用需要的所有Python包。用下面这个命令一键安装所有装备pip install -r requirements.txt这个过程可能会花几分钟主要会安装这些重要的包streamlit用来构建Web界面的框架是我们今天改造的重点。qwen-tts阿里云的语音合成模型是应用的核心能力。pydub处理音频文件的工具比如播放、保存生成的语音。如果下载速度比较慢可以试试用国内的镜像源速度会快很多pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple2.3 第一次启动看看原版长什么样装备安装好后我们就可以启动应用了streamlit run app.py等几秒钟你的浏览器会自动打开一个新页面地址是http://localhost:8501。这时候你会看到Super Qwen Voice World的原始界面——已经是复古像素风格了但还没有马里奥的经典元素。先别急着关掉花一分钟玩一下点击左侧的黄色蘑菇按钮看看预设的“关卡”台词。在“台词输入”框里写一句话。在“语气描述”框里试试写“开心的语气”或者“神秘的低语”。点击那个大大的黄色问号按钮“❓ 顶开方块合成声音”。你会看到底部的小乌龟在爬砖块在跳动然后如果你配置了TTS模型就能听到AI生成的语音了。记住这个原始的样子等会儿改造完对比一下变化会非常明显。3. 理解Streamlit的“皮肤系统”Theming API要给应用换皮肤我们得先了解Streamlit的“皮肤系统”是怎么工作的。你可以把它想象成游戏的“模组Mod”系统——不改动核心游戏代码只替换贴图和音效就能让游戏焕然一新。3.1 主题配置文件.streamlit/config.tomlStreamlit应用的外观主要由一个配置文件控制这个文件位于项目根目录的.streamlit文件夹里名字叫config.toml。TOML是一种很简单的配置文件格式看起来就像这样[theme] primaryColor #FF4B4B backgroundColor #FFFFFF secondaryBackgroundColor #F0F2F6 textColor #262730 font sans serif每一行都定义了一个颜色primaryColor主要颜色用于按钮、滑块等交互元素。backgroundColor页面背景色。secondaryBackgroundColor侧边栏、卡片等次要区域的背景色。textColor主要文字颜色。font默认字体。这些颜色值都是十六进制代码比如#FF0000是纯红色#00FF00是纯绿色#0000FF是纯蓝色。3.2 马里奥的经典配色密码要还原马里奥的经典风格我们需要分析游戏里的标志性颜色。我帮你整理好了游戏元素颜色代码在Streamlit中的用途马里奥的帽子/衣服#E52521主要按钮、重要标题、强调色马里奥的裤子#1E7FCB侧边栏背景、次要按钮天空背景#5BCEFA页面主背景色砖块/地面#B97A57输入框背景、卡片背景金币/星星#FFD700高亮文字、成功提示蘑菇/1UP#FF6BCB特殊功能按钮、装饰元素文字#FFFFFF白或#000000黑标题、正文根据背景选择有了这份“配色密码”我们就可以开始动手改造了。4. 实战改造第一步基础配色大换装现在让我们开始真正的改造工作。我们会从基础配色开始然后一步步添加像素字体、游戏化控件最后加上动画效果。4.1 创建主题配置文件首先在你的项目根目录下创建.streamlit文件夹和config.toml文件# 创建配置文件夹如果还没有的话 mkdir -p .streamlit # 创建配置文件 # Windows用户可以用记事本新建文件然后保存为 config.toml # Mac/Linux用户可以用这个命令 touch .streamlit/config.toml用你喜欢的文本编辑器打开这个文件VS Code、Sublime Text、甚至记事本都可以然后把下面的马里奥主题配置复制进去# .streamlit/config.toml - 马里奥主题 [theme] # 主要颜色 - 马里奥的经典红色 primaryColor #E52521 # 背景色 - 马里奥世界的天空蓝 backgroundColor #5BCEFA # 次要背景色 - 砖块和地面的棕色 secondaryBackgroundColor #B97A57 # 文字颜色 - 白色在深色背景上更清晰 textColor #FFFFFF # 字体 - 先保持默认后面我们用CSS改成像素字体 font sans serif # 辅助颜色 - 马里奥裤子的蓝色 secondaryColor #1E7FCB # 次要文字颜色 - 浅灰色用于说明文字 textSecondaryColor #F0F0F0 # 小部件设置 widgetBackgroundColor #FFFFFF widgetBorderColor #E52521 widgetBorderRadius 8px保存文件然后回到命令行。如果你之前已经启动了Streamlit应用先按CtrlC停止它然后重新启动streamlit run app.py刷新浏览器页面看看发生了什么变化按钮变成了马里奥红页面背景变成了天空蓝侧边栏和输入框变成了砖块棕文字变成了白色基础配色已经生效了但看起来还有点“粗糙”因为字体还是默认的按钮也没有游戏感。别急我们继续优化。4.2 添加自定义CSS精细控制每个元素Streamlit允许我们添加自定义的CSS样式这就像给游戏打高清材质包一样可以控制每一个细节。在.streamlit文件夹下创建一个新文件命名为style.css/* .streamlit/style.css - 马里奥主题定制样式 */ /* 1. 全局设置使用像素字体 */ * { font-family: Press Start 2P, cursive, sans-serif !important; } /* 2. 标题样式金色带红色阴影像游戏标题 */ h1, h2, h3 { color: #FFD700 !important; /* 金币金色 */ text-shadow: 3px 3px 0 #E52521 !important; /* 红色阴影增加立体感 */ letter-spacing: 1px; margin-bottom: 20px !important; } /* 3. 按钮样式做成游戏里的按钮样子 */ .stButton button { background-color: #E52521 !important; /* 马里奥红 */ color: white !important; border: 3px solid #8B0000 !important; /* 深红色边框 */ border-radius: 8px !important; font-weight: bold !important; padding: 12px 24px !important; font-size: 14px !important; transition: all 0.2s ease !important; cursor: pointer !important; } /* 按钮悬停效果轻微上浮和阴影 */ .stButton button:hover { background-color: #FF0000 !important; /* 更亮的红色 */ transform: translateY(-3px); box-shadow: 0 6px 12px rgba(229, 37, 33, 0.3) !important; } /* 4. 输入框样式做成砖块效果 */ .stTextInput div div input, .stTextArea div div textarea { background-color: #B97A57 !important; /* 砖块棕 */ border: 2px solid #8B4513 !important; /* 深棕色边框 */ border-radius: 4px !important; color: white !important; padding: 12px !important; font-size: 14px !important; } /* 输入框聚焦效果金色边框 */ .stTextInput div div input:focus, .stTextArea div div textarea:focus { border-color: #FFD700 !important; box-shadow: 0 0 0 2px rgba(255, 215, 0, 0.3) !important; } /* 5. 侧边栏样式马里奥的蓝色裤子 */ section[data-testidstSidebar] { background-color: #1E7FCB !important; /* 马里奥蓝 */ border-right: 5px solid #E52521 !important; /* 红色右边框 */ } /* 侧边栏标题 */ section[data-testidstSidebar] h1, section[data-testidstSidebar] h2, section[data-testidstSidebar] h3 { color: #FFFFFF !important; text-shadow: 2px 2px 0 #000000 !important; } /* 6. 滑块控件做成蘑菇的粉色 */ .stSlider div div div div { background-color: #FF6BCB !important; /* 蘑菇粉 */ } /* 滑块数值显示 */ .stSlider div div div div div { color: #FFFFFF !important; font-weight: bold !important; } /* 7. 成功/警告消息框 */ .stAlert div { border-radius: 8px !important; border-width: 3px !important; } /* 成功消息金币样式 */ div[data-testidstAlert] div:has(svg[aria-labelcheck-circle]) { background-color: rgba(255, 215, 0, 0.9) !important; /* 半透明金色 */ border: 3px dashed #E52521 !important; color: #8B0000 !important; /* 深红色文字 */ } /* 警告消息危险砖块样式 */ div[data-testidstAlert] div:has(svg[aria-labelexclamation-triangle]) { background-color: rgba(229, 37, 33, 0.9) !important; border: 3px solid #8B0000 !important; color: #FFFFFF !important; } /* 8. 主内容区域装饰 */ .main .block-container { padding-top: 2rem; padding-bottom: 2rem; /* 添加一些像素风格的背景装饰 */ background-image: radial-gradient(circle at 10% 20%, rgba(255, 107, 203, 0.1) 0%, transparent 20%), radial-gradient(circle at 90% 80%, rgba(30, 127, 203, 0.1) 0%, transparent 20%); }4.3 在应用中加载CSS和像素字体现在我们需要告诉Streamlit加载这个CSS文件同时还要加载像素字体。修改你的app.py文件在开头部分添加# app.py - 在文件开头添加这些代码 import streamlit as st # 加载自定义CSS和字体 def load_custom_assets(): 加载马里奥主题所需的CSS样式和像素字体 # 1. 加载Google Fonts的像素字体 st.markdown( link hrefhttps://fonts.googleapis.com/css2?familyPressStart2Pdisplayswap relstylesheet link hrefhttps://fonts.googleapis.com/css2?familyZCOOLKuaiLedisplayswap relstylesheet , unsafe_allow_htmlTrue) # 2. 加载自定义CSS文件 try: with open(.streamlit/style.css, r, encodingutf-8) as f: css_content f.read() st.markdown(fstyle{css_content}/style, unsafe_allow_htmlTrue) except FileNotFoundError: st.warning(⚠️ 未找到自定义CSS文件使用基础样式) # 如果CSS文件不存在使用基础的内联样式 st.markdown( style * { font-family: Press Start 2P, cursive, sans-serif; } h1 { color: #FFD700; text-shadow: 2px 2px 0 #E52521; } .stButton button { background-color: #E52521 !important; color: white !important; border: 3px solid #8B0000 !important; } /style , unsafe_allow_htmlTrue) # 在页面最开始调用这个函数 load_custom_assets() # 然后继续你原来的代码... # st.title( Super Qwen Voice World) # ... 其他应用代码保存文件然后重启Streamlit应用。现在刷新页面你会看到所有文字都变成了像素字体按钮有了游戏感的边框和悬停效果输入框看起来像砖块侧边栏变成了马里奥的蓝色裤子基础改造完成了但还缺少一点灵魂——动画效果。5. 高级定制让界面真正“活”起来一个好的游戏界面不只是静态的图片它应该有生命感。让我们添加一些动画让整个应用“动”起来。5.1 添加CSS动画效果在style.css文件的末尾添加这些动画定义/* 游戏动画效果 */ /* 马里奥跳跃动画 - 用于加载状态 */ keyframes marioJump { 0% { transform: translateY(0); } 50% { transform: translateY(-15px); } 100% { transform: translateY(0); } } /* 金币旋转动画 - 用于成功状态 */ keyframes coinSpin { 0% { transform: rotateY(0); } 100% { transform: rotateY(360deg); } } /* 砖块闪烁动画 - 用于重要提示 */ keyframes brickBlink { 0%, 100% { background-color: #B97A57; box-shadow: 0 0 0 rgba(185, 122, 87, 0.7); } 50% { background-color: #D4A574; box-shadow: 0 0 15px rgba(212, 165, 116, 0.9); } } /* 乌龟爬行动画 - 装饰效果 */ keyframes turtleWalk { 0% { transform: translateX(-50px); } 100% { transform: translateX(calc(100vw 50px)); } } /* 应用动画到具体元素 */ /* 加载旋转器变成跳跃的马里奥 */ .stSpinner div { animation: marioJump 0.6s ease-in-out infinite !important; background-color: #E52521 !important; width: 30px !important; height: 30px !important; border-radius: 50% !important; } /* 成功图标变成旋转的金币 */ div[data-testidstAlert] div:has(svg[aria-labelcheck-circle]) svg { animation: coinSpin 1.5s linear infinite !important; color: #FFD700 !important; } /* 重要区域添加砖块闪烁效果 */ .important-brick { animation: brickBlink 2s ease-in-out infinite; padding: 15px; border-radius: 8px; border: 3px solid #8B4513; margin: 10px 0; } /* 进度条变成游戏生命条样式 */ .stProgress div div div div { background-color: #E52521 !important; /* 生命条的纹理效果 */ background-image: linear-gradient( 45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent ) !important; background-size: 20px 20px !important; border: 2px solid #8B0000 !important; border-radius: 10px !important; height: 20px !important; } /* 底部装饰爬行的乌龟需要HTML元素配合 */ .turtle-walker { position: fixed; bottom: 20px; left: 0; width: 40px; height: 30px; background-color: #00AA00; border-radius: 50% 50% 40% 40%; animation: turtleWalk 20s linear infinite; z-index: 9999; opacity: 0.7; }5.2 在Python代码中触发动画现在让我们修改应用代码在适当的时候触发这些动画。在app.py中找到生成语音的部分添加动画效果import time import random # 在生成语音的函数中 def generate_voice_with_animation(text, tone_description, temperature, top_p): 带有游戏化动画的语音生成函数 if not text.strip(): # 如果没有输入文字显示警告动画 st.warning(⚠️ 请输入台词再开始冒险) return None # 显示游戏化的加载状态 with st.spinner( 马里奥正在顶砖块生成语音...): # 添加一个游戏生命条样式的进度条 progress_bar st.progress(0) status_text st.empty() # 模拟生成过程实际项目中这里是调用TTS模型 steps [准备魔法..., 混合语气..., 合成声音..., 添加特效..., 完成] for i, step in enumerate(steps): # 更新进度和状态 progress (i 1) * 20 progress_bar.progress(progress) status_text.text(f {step}) # 模拟处理时间 time.sleep(0.5 random.random() * 0.3) # 清除进度条和状态 progress_bar.empty() status_text.empty() # 显示成功动画和奖励 st.balloons() # Streamlit自带的气球动画 # 自定义的成功消息框 success_html div style background: linear-gradient(135deg, #FFD700, #FFEC8B); border: 3px dashed #E52521; border-radius: 10px; padding: 20px; margin: 20px 0; text-align: center; box-shadow: 0 4px 15px rgba(255, 215, 0, 0.3); h3 stylecolor: #8B0000; margin: 0 0 15px 0; 关卡完成语音生成成功/h3 div styledisplay: flex; justify-content: center; gap: 30px; margin: 15px 0; div styletext-align: center; div stylefont-size: 24px;/div div stylefont-weight: bold; color: #8B0000;金币 ×100/div /div div styletext-align: center; div stylefont-size: 24px;/div div stylefont-weight: bold; color: #8B0000;1UP蘑菇 ×1/div /div div styletext-align: center; div stylefont-size: 24px;⭐/div div stylefont-weight: bold; color: #8B0000;无敌星 ×1/div /div /div p stylecolor: #8B0000; margin: 10px 0 0 0;点击下方播放按钮试听你的语音奖励/p /div st.markdown(success_html, unsafe_allow_htmlTrue) # 显示生成统计游戏化展示 with st.expander( 冒险统计, expandedTrue): col1, col2, col3 st.columns(3) with col1: st.metric(⏱️ 通关时间, f{2.3 random.random():.1f}秒) with col2: st.metric( 台词长度, f{len(text)} 字符) with col3: st.metric( 创意指数, f{temperature * 100:.0f}%) # 这里应该返回真实的音频数据 # audio_data tts_model.generate(text, tone_description, temperature, top_p) # return audio_data # 暂时返回None实际使用时替换为真实音频 return None # 在按钮点击事件中调用这个函数 if st.button(❓ 顶开方块合成声音, use_container_widthTrue, typeprimary): # 获取用户输入 text_input st.session_state.get(text_input, ) tone_input st.session_state.get(tone_input, 开心的语气) temperature st.session_state.get(temperature, 0.7) top_p st.session_state.get(top_p, 0.9) # 调用带有动画的生成函数 audio_data generate_voice_with_animation(text_input, tone_input, temperature, top_p) # 如果有音频数据显示播放器 if audio_data: st.audio(audio_data, formataudio/wav)5.3 添加底部装饰动画为了让界面更有游戏世界的沉浸感我们可以在页面底部添加一个爬行的乌龟装饰。在app.py的合适位置添加# 在页面底部添加装饰性元素 def add_game_decorations(): 添加游戏化的装饰元素 # 爬行的乌龟 st.markdown( div classturtle-walker/div style .turtle-walker::before { content: ; position: absolute; left: 5px; top: -5px; font-size: 20px; } /style , unsafe_allow_htmlTrue) # 底部状态栏 st.markdown(---) st.markdown( div style display: flex; justify-content: space-between; align-items: center; padding: 10px 0; font-family: Press Start 2P, cursive; font-size: 12px; color: #FFFFFF; div 基于 Qwen3-TTS 构建/div div 马里奥主题定制版/div div 最高分: 999,999/div /div , unsafe_allow_htmlTrue) # 在页面布局的最后调用 add_game_decorations()6. 完整代码整合与效果展示现在让我们把所有修改整合起来看看完整的马里奥主题Super Qwen Voice World是什么样子。6.1 最终的项目结构完成所有修改后你的项目文件夹应该是这样的super-qwen-voice-world/ ├── app.py # 主应用文件已修改 ├── requirements.txt # 依赖包列表 ├── .streamlit/ # Streamlit配置文件夹 │ ├── config.toml # 马里奥主题配置文件 │ └── style.css # 自定义样式文件包含动画 ├── assets/ # 图片等资源文件可选 │ └── mario-icons/ # 马里奥图标素材 └── README.md # 项目说明6.2 完整的app.py核心代码这是一个简化但完整的app.py示例展示了马里奥主题的核心实现import streamlit as st import time import random # 页面配置 st.set_page_config( page_titleSuper Qwen Voice World - 马里奥特别版, page_icon, layoutwide, initial_sidebar_stateexpanded ) # 加载自定义主题 def load_mario_theme(): 加载马里奥主题的CSS和字体 # 加载像素字体 st.markdown( link hrefhttps://fonts.googleapis.com/css2?familyPressStart2Pdisplayswap relstylesheet link hrefhttps://fonts.googleapis.com/css2?familyZCOOLKuaiLedisplayswap relstylesheet , unsafe_allow_htmlTrue) # 加载自定义CSS try: with open(.streamlit/style.css, r, encodingutf-8) as f: st.markdown(fstyle{f.read()}/style, unsafe_allow_htmlTrue) except: # 备用基础样式 st.markdown( style * { font-family: Press Start 2P, cursive, sans-serif; } h1 { color: #FFD700; text-shadow: 2px 2px 0 #E52521; } .stButton button { background-color: #E52521 !important; color: white !important; border: 3px solid #8B0000 !important; border-radius: 8px !important; } /style , unsafe_allow_htmlTrue) # 应用主题 load_mario_theme() # 游戏标题 st.title( Super Qwen Voice World) st.markdown(### 欢迎来到语音设计的蘑菇王国) # 侧边栏 - 游戏菜单 with st.sidebar: st.header( 游戏菜单) # 关卡选择 st.subheader(选择关卡) level st.radio( 难度等级:, [ 1-1 新手训练, ⭐ 1-2 语气大师, 2-1 角色扮演, BOSS 创意挑战], index0 ) # 快速载入预设 if st.button( 载入关卡台词, use_container_widthTrue): presets { 1-1 新手训练: (你好我是马里奥, 开心兴奋的语气), ⭐ 1-2 语气大师: (公主在另一个城堡, 失望但坚定的语气), 2-1 角色扮演: (谢谢你马里奥但公主在另一个城堡。, 公主温柔感谢的语气), BOSS 创意挑战: (哇哈哈我是库巴公主是我的, 邪恶反派大笑的语气) } text, tone presets.get(level, (, )) st.session_state.text_input text st.session_state.tone_input tone st.rerun() st.markdown(---) # 游戏设置 st.header(⚙️ 游戏设置) st.subheader(️ 声音控制) temperature st.slider( 魔法威力 (Temperature), 0.0, 1.0, 0.7, 0.1, help控制声音的创意程度越高越有创意但可能不稳定 ) top_p st.slider( 跳跃精准 (Top P), 0.0, 1.0, 0.9, 0.1, help控制声音的稳定性越高越稳定但可能缺乏变化 ) st.markdown(---) st.caption( 提示Temperature像魔法威力Top P像跳跃精准度) # 主游戏区域 col1, col2 st.columns([2, 1]) with col1: st.header( 输入你的台词) # 台词输入区 - 砖块样式 st.markdown(#### 台词输入) text_input st.text_area( 在这里写下你想说的话:, height150, valuest.session_state.get(text_input, 你好我是马里奥今天要去城堡救公主。), keytext_input, placeholder例如你好我是马里奥今天要去救公主..., help输入你想要转换成语音的文字 ) # 语气描述区 st.markdown(#### 语气描述) tone_input st.text_input( 描述你想要的语气:, valuest.session_state.get(tone_input, 开心、兴奋、像游戏英雄说话), keytone_input, placeholder例如开心、兴奋、像游戏角色说话, help用文字描述你希望的语气风格 ) with col2: st.header(️ 控制面板) # 游戏状态显示 st.markdown(### 当前状态) st.metric(️ 魔法威力, f{temperature:.1f}) st.metric( 跳跃精准, f{top_p:.1f}) # 重要提示区域 st.markdown( div classimportant-brick strong 游戏提示/strongbr 1. 先选择关卡载入示例br 2. 修改台词和语气描述br 3. 调整魔法和精准度br 4. 点击按钮生成语音 /div , unsafe_allow_htmlTrue) # 生成按钮和结果 st.markdown(---) # 生成按钮 - 大型游戏按钮 if st.button(❓ 顶开方块合成声音, use_container_widthTrue, typeprimary): if text_input.strip(): # 显示加载动画 with st.spinner( 马里奥正在顶砖块生成语音...): # 模拟生成过程 progress_bar st.progress(0) for i in range(100): time.sleep(0.02) progress_bar.progress(i 1) # 显示成功动画 st.balloons() # 游戏化成功消息 st.success( **关卡完成语音生成成功** **获得奖励:** - 金币 ×100 - 1UP蘑菇 ×1 - 无敌星 ×1 点击下方播放按钮试听你的语音奖励 ) # 这里应该播放真实的音频 # st.audio(audio_data, formataudio/wav) # 显示生成统计 with st.expander( 冒险统计, expandedTrue): col1, col2, col3 st.columns(3) with col1: st.metric(⏱️ 通关时间, f{2.3:.1f}秒) with col2: st.metric( 台词长度, f{len(text_input)} 字符) with col3: st.metric( 创意指数, f{temperature * 100:.0f}%) else: st.warning(⚠️ 请输入台词再开始冒险) # 底部装饰和状态栏 st.markdown(---) # 爬行的乌龟装饰 st.markdown( div classturtle-walker/div style .turtle-walker::before { content: ; position: absolute; left: 5px; top: -5px; font-size: 20px; } /style , unsafe_allow_htmlTrue) # 游戏状态栏 st.markdown( div style display: flex; justify-content: space-between; align-items: center; padding: 15px 0; font-family: Press Start 2P, cursive; font-size: 12px; color: #FFFFFF; background: linear-gradient(90deg, #E52521, #1E7FCB); border-radius: 8px; padding: 15px; margin-top: 20px; div 基于 Qwen3-TTS 构建/div div 马里奥主题定制版/div div 最高分: 999,999/div /div , unsafe_allow_htmlTrue)6.3 实际运行效果保存所有文件后重新启动应用streamlit run app.py现在你会看到一个完全改头换面的Super Qwen Voice World视觉风格经典的红蓝配色像素字体砖块样式的输入框交互体验按钮有悬停效果和点击反馈加载时有马里奥跳跃动画成功时有金币旋转动画和气球庆祝底部有爬行的乌龟装饰游戏化元素参数调节变成了“魔法威力”和“跳跃精准”生成语音变成了“顶开方块”成功后有金币、蘑菇、星星奖励有关卡选择和预设台词试着操作一下在侧边栏选择一个关卡点击“载入关卡台词”按钮修改台词和语气描述调节“魔法威力”和“跳跃精准”滑块点击大大的黄色问号按钮生成语音整个体验就像在玩一个语音生成游戏而不是在使用一个技术工具。7. 总结从工具到游戏的蜕变7.1 我们完成了什么通过这个完整的改造项目我们不仅学会了Streamlit主题定制更重要的是掌握了如何通过UI设计提升用户体验基础主题定制通过config.toml文件快速改变应用的整体配色方案CSS深度定制用自定义CSS精细控制每一个界面元素的样式游戏化设计把技术参数变成游戏术语把操作流程变成游戏任务动画效果用CSS动画和Streamlit组件让界面生动起来完整项目整合把所有修改有机地整合到一个可运行的应用中7.2 你可以继续探索的方向这个马里奥主题只是一个起点你可以在基础上做更多创意扩展 更多游戏主题皮肤塞尔达传说主题绿色和金色的配色宝剑和盾牌图标神秘古老的字体宝可梦主题红白配色精灵球样式的按钮宠物小精灵图标星之卡比主题粉色主题圆润可爱的UI元素星星和彩虹装饰 动态主题切换系统让用户可以在设置里自由切换主题theme st.selectbox(选择游戏主题, [马里奥, 塞尔达, 宝可梦, 黑暗之魂]) if theme 马里奥: load_mario_theme() elif theme 塞尔达: load_zelda_theme() # ... 其他主题 游戏音效集成用JavaScript和Streamlit组件添加音效# 播放音效的HTML/JS代码 sound_html audio idjumpSound srcjump.mp3 preloadauto/audio script function playJumpSound() { document.getElementById(jumpSound).play(); } /script st.markdown(sound_html, unsafe_allow_htmlTrue) # 在按钮点击时播放音效 if st.button(跳跃, on_clickplayJumpSound): # ... 按钮逻辑 移动端优化通过CSS媒体查询确保在手机上也有好体验media (max-width: 768px) { /* 手机上的样式调整 */ .stButton button { padding: 15px !important; font-size: 14px !important; width: 100% !important; } h1 { font-size: 1.5rem !important; } } 成就系统添加游戏化的成就系统鼓励用户探索所有功能# 简单的成就跟踪 if achievements not in st.session_state: st.session_state.achievements { first_voice: False, all_tones: False, expert_mode: False } # 检查并授予成就 if not st.session_state.achievements[first_voice] and generated_audio: st.session_state.achievements[first_voice] True st.balloons() st.success(️ 获得成就第一次冒险)7.3 最重要的收获技术层面我们掌握了Streamlit主题定制的全套技能。但更重要的是我们看到了用户体验设计的力量。Super Qwen Voice World本身是一个功能强大的AI语音工具但通过马里奥主题的改造降低了学习成本把“温度参数”变成“魔法威力”把“Top-P”变成“跳跃精准”用户瞬间就理解了增加了使用乐趣从“完成任务”变成“闯关游戏”用户更愿意尝试不同功能创造了情感连接熟悉的游戏元素唤起了用户的美好回忆提升了分享价值这么酷的界面用户更愿意分享给朋友无论你是在开发AI应用、数据分析工具还是任何需要用户交互的系统记住好的UI不只是让产品好看更是让产品好用、好玩、好记。现在你已经掌握了Streamlit主题定制的全套技能。是时候发挥你的创意为你自己的项目设计独特的主题了。无论是复古游戏风、科幻未来风还是简约商务风用代码创造令人难忘的用户体验吧获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。