文章目录
- 1. 基础打印 + 覆盖同一行
- 2. 多行动画效果
- 3. 彩色文本(Windows/macOS/Linux)
- 4. 输入交互
- 5. 异步输入与非阻塞显示
- 6. 高级控制台 UI 库
可以通过控制台打印实现简单的「伪UI交互」,尤其适合展示进度、动态文本或轻量级状态反馈。以下是几种常见方法及示例:
1. 基础打印 + 覆盖同一行
用 \r
实现覆盖当前行内容(无需换行),适合显示动态进度。
import time
import sysfor i in range(101):# \r 将光标移动到行首,覆盖之前的输出sys.stdout.write(f"\r进度: [{'=' * i}{' ' * (100 - i)}] {i}%")sys.stdout.flush() # 立即刷新输出缓冲区time.sleep(0.05)
print("\n完成!") # 换行结束
效果:
进度: [================================================== ] 50%
2. 多行动画效果
通过清屏或移动光标实现多行动态效果(需 os
模块支持)。
import time
import osdef clear_console():os.system('cls' if os.name == 'nt' else 'clear')while True:clear_console()print("=== 动态信息 ===")print("1. 当前任务: 数据处理中...")print("2. 进度: 75%")print("3. 剩余时间: 10秒")time.sleep(1)# 按 Ctrl+C 退出循环
3. 彩色文本(Windows/macOS/Linux)
使用 colorama
库(跨平台彩色输出)增强可读性。
# 安装库:pip install colorama
from colorama import Fore, Back, Style
import timeprint(Fore.GREEN + "开始处理...")
time.sleep(1)
print(Back.YELLOW + Fore.BLACK + "警告:内存占用过高!")
time.sleep(1)
print(Style.RESET_ALL + "操作完成。") # 重置颜色
效果:
绿色文字 → 黄底黑字警告 → 重置后默认颜色。
4. 输入交互
通过 input()
获取用户输入,但会阻塞线程直到输入完成。
name = input("请输入你的名字: ")
print(f"你好, {name}!")
5. 异步输入与非阻塞显示
结合 threading
实现「边输入边显示进度」(需处理线程同步)。
import threading
import timedef background_task():for i in range(5):print(f"\r后台任务进度: {i+1}/5", end="")time.sleep(1)print("\r后台任务完成!")# 启动后台线程
thread = threading.Thread(target=background_task)
thread.start()# 主线程继续接收输入
name = input("请输入你的名字: ")
print(f"你好, {name}! 后台任务已结束。")
6. 高级控制台 UI 库
如果需要更复杂的交互(如菜单、表格),可使用专用库:
• rich
: 支持富文本、表格、进度条等(GitHub)
• curses
: 终端图形库(需手动处理布局)
使用 rich
示例:
# 安装库:pip install rich
from rich.progress import track
import timefor _ in track(range(100), description="处理中..."):time.sleep(0.05)
效果:
带进度条、描述文字和自动更新的控制台界面。
优缺点对比
方法 | 优点 | 缺点 |
---|---|---|
基础打印覆盖 | 无需任何库,兼容所有环境 | 无法复杂布局,依赖回车覆盖 |
多行动画 | 可展示更多信息 | 需清屏操作,可能闪烁 |
彩色文本 | 提升可读性 | Windows 需额外配置 |
输入交互 | 简单直接 | 阻塞线程,无法同时显示动态内容 |
rich 等库 | 功能强大,界面美观 | 需安装第三方库 |
适用场景
• 简单进度反馈:用 \r
覆盖或 rich.progress
。
• 命令行工具:用 input()
和 print()
组合。
• 监控类脚本:多行动画 + 定时刷新。
• 需要美观输出:直接使用 rich
或 colorama
。
如果需要真正的交互式 UI(如按钮、窗口),仍需使用 Tkinter/PyQt 等 GUI 框架。