文章目錄
- 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 框架。