当前位置: 首页 > news >正文

【Python】控制台界面演示

依赖库安装命令:

pip install rich

源代码:

import asyncio
from rich.console import Console
from rich.layout import Layout
from rich.panel import Panel
from rich.table import Table
from rich.progress import Progress, SpinnerColumn, BarColumn, TextColumn
from rich.syntax import Syntax
from rich.live import Live
from rich.text import Text
from rich import box
from rich.tree import Tree
from rich.bar import Bar
from rich.logging import RichHandler
from rich.spinner import Spinner
import logging
import random
import time
import sysconsole = Console()logging.basicConfig(level=logging.DEBUG,format="%(message)s",datefmt="[%X]",handlers=[RichHandler(rich_tracebacks=True, markup=True)]
)
log = logging.getLogger("rich")def make_layout() -> Layout:layout = Layout(name="root")layout.split(Layout(name="header", size=3),Layout(name="main", ratio=1),Layout(name="footer", size=3),)layout["main"].split_row(Layout(name="side"),Layout(name="body", ratio=2, minimum_size=60),)layout["side"].split(Layout(name="box1"), Layout(name="box2"))return layoutdef make_header() -> Panel:return Panel("[b]Rich Console Application[/b] - Advanced Demo", style="bold magenta")def make_footer() -> Panel:return Panel("Press Ctrl+C to exit", style="dim")def make_menu() -> Panel:menu_text = Text("\n1. View Data Table\n2. View Progress Demo\n3. Interactive Form\n4. Syntax Highlighting\n5. Tree View\n6. Bar Chart\n7. Log Demo\n8. Animation Demo\n9. Exit\n", justify="center")return Panel(menu_text, title="[b]Main Menu[/b]", border_style="bright_blue")def show_menu_options():table = Table(show_header=False, box=box.ROUNDED, expand=True)table.add_column("Option", style="cyan", no_wrap=True)table.add_column("Description", style="magenta")table.add_row("1", "View Data Table")table.add_row("2", "View Progress Demo")table.add_row("3", "Interactive Form")table.add_row("4", "Syntax Highlighting")table.add_row("5", "Tree View")table.add_row("6", "Bar Chart")table.add_row("7", "Log Demo")table.add_row("8", "Animation Demo")table.add_row("9", "Exit")console.print(Panel(table, title="[b]Main Menu Options[/b]", border_style="bright_blue"))def show_data_table():table = Table(title="User Data", box=box.DOUBLE_EDGE)table.add_column("ID", style="cyan", no_wrap=True)table.add_column("Name", style="magenta")table.add_column("Role", justify="right", style="green")table.add_column("Status", justify="center")table.add_row("1", "Alice Smith", "Admin", "[green]Active[/green]")table.add_row("2", "Bob Johnson", "User", "[yellow]Pending[/yellow]")table.add_row("3", "Charlie Brown", "Moderator", "[green]Active[/green]")table.add_row("4", "Diana Prince", "Admin", "[red]Inactive[/red]")table.add_row("5", "Eve Wilson", "User", "[green]Active[/green]")return Panel(table, title="[b]Data Table[/b]", border_style="bright_cyan")def show_progress_demo():progress = Progress("{task.description}",SpinnerColumn(),BarColumn(),TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),)task = progress.add_task("[cyan]Processing...", total=100)for i in range(100):progress.update(task, completed=i+1)time.sleep(0.001)progress.update(task, completed=100)progress_table = Table.grid(expand=True)progress_table.add_row("[b]Progress Demo[/b]", progress)return Panel(progress_table, title="[b]Progress Demo[/b]", border_style="bright_green")def show_form_demo():console.print(Panel("[b]Interactive Form Demo[/b]", border_style="bright_yellow"))form_data = Table(title="Form Data", box=box.SQUARE)form_data.add_column("Field", style="cyan")form_data.add_column("Value", style="magenta")form_data.add_row("Name", "John Doe")form_data.add_row("Age", "30")form_data.add_row("Email", "john.doe@example.com")return Panel(form_data, title="[b]Sample Data[/b]", border_style="bright_yellow")def show_syntax_demo():code = '''
def fibonacci(n):if n <= 1:return nelse:return fibonacci(n-1) + fibonacci(n-2)def main():for i in range(10):print(fibonacci(i))if __name__ == "__main__":main()
'''syntax = Syntax(code, "python", theme="monokai", line_numbers=True)return Panel(syntax, title="[b]Python Code Example[/b]", border_style="bright_red")def show_tree_view():tree = Tree("Root", style="bold red")branch1 = tree.add("Branch 1", style="green")branch1.add("Leaf 1").add("Subleaf 1")branch1.add("Leaf 2")branch2 = tree.add("Branch 2", style="yellow")branch2.add("Leaf 3")branch2.add("Leaf 4").add("Subleaf 2").add("Subsubleaf")return Panel(tree, title="[b]Tree View[/b]", border_style="bright_magenta")def show_bar_chart():chart_data = [("Project A", 30),("Project B", 55),("Project C", 70),("Project D", 45),("Project E", 90),]chart = ""for label, value in chart_data:bar_length = int(value / 100 * 20)bar = "#" * bar_length + "-" * (20 - bar_length)chart += f"{label:12}: {bar} {value}%\n"return Panel(chart, title="[b]Project Progress Bar Chart[/b]", border_style="bright_cyan")def show_log_demo():log_panel = Panel("", title="[b]Application Logs[/b]", border_style="bright_white")log_messages = ["Application started","Loading configuration...","Connecting to database...","Database connection established","User authentication successful","Processing user requests...","Background tasks completed"]log_text = Text()for i, msg in enumerate(log_messages):level = random.choice(["INFO", "DEBUG", "WARNING", "ERROR"])if level == "INFO":log_text.append(f"[{level}] {msg}\n", style="green")elif level == "DEBUG":log_text.append(f"[{level}] {msg}\n", style="blue")elif level == "WARNING":log_text.append(f"[{level}] {msg}\n", style="yellow")elif level == "ERROR":log_text.append(f"[{level}] {msg}\n", style="red")time.sleep(0.2)return Panel(log_text, title="[b]Application Logs[/b]", border_style="bright_white")def show_animation_demo():spinner = Spinner('dots', text='Processing...')spinner_panel = Panel(spinner, title="[b]Loading Animation[/b]", border_style="bright_yellow")for i in range(100):spinner.update(text=f"Processing... {i+1}%")time.sleep(0.001)return Panel("[green]Animation demo completed![/green]", title="[b]Status[/b]", border_style="bright_green")def main_menu():layout = make_layout()layout["header"].update(make_header())layout["footer"].update(make_footer())layout["body"].update(make_menu())console.print(layout)demos = [("Data Table", show_data_table),("Progress Demo", show_progress_demo),("Form Demo", show_form_demo),("Syntax Demo", show_syntax_demo),("Tree View", show_tree_view),("Bar Chart", show_bar_chart),("Log Demo", show_log_demo),("Animation Demo", show_animation_demo)]for demo_name, demo_func in demos:layout["body"].update(demo_func())layout["side"].visible = Falseconsole.print(layout)time.sleep(5)layout["body"].update(make_menu())layout["side"].visible = Trueconsole.print(layout)time.sleep(1)console.print("[bold red]Demo completed...[/bold red]")if __name__ == "__main__":main_menu()

运行结果:

http://www.dtcms.com/a/392322.html

相关文章:

  • 软考中级习题与解答——第九章_信息安全(2)
  • [新启航]民航发动机燃油喷嘴的多孔阵列孔深光学 3D 轮廓测量 - 激光频率梳 3D 轮廓技术
  • 【测试开发/测试】详解测试用例(下):详解设计测试用例的方法
  • Go基础:Go语言错误和异常详解
  • kubeadm部署K8S单master架构实战
  • npx命令介绍(Node Package Execute)(允许开发者直接执行来自npm注册表的包中的二进制文件,而无需全局安装)临时使用
  • LeetCode 3508.设计路由器:STL套STL——有什么需求就设计什么数据结构
  • 基本排序算法
  • 学习Python中Selenium模块的基本用法(15:窗口操作)
  • 能力(1)
  • UE4/UE5 如何迁移HotPatcher插件
  • SQL从入门到起飞:完整数据库操作练习
  • MyBatis 从入门到进阶:数据库操作全指南
  • spring cloud 同一服务多实例 websocket跨实例无法共享Session 的解决
  • 如何通过pycharm使用AutoDL服务器
  • 【Linux】4G网卡-AT命令
  • 新版本附近停车场推荐系统demo,基于python+flask+协同推荐+空车位识别+yolov人工智能开发,开发语言python,数据库mysql
  • 《UE5_C++多人TPS完整教程》学习笔记55 ——《P56 网络更新频率(Net Update Frequency)》
  • 华为鸿蒙 ArkTS 实战:基于 RelationalStore 的 SQLite 实现本地数据持久化
  • 流行的 3D 文件格式及其用途指南
  • 腾讯发布一站式工作平台“混元3D Studio
  • TGRS2025 | 视觉语言模型 | 文本驱动自适应网络实现高光谱跨场景零样本分类
  • PyQt6之选项卡示例
  • 研学小程序前端平台开发项目需求规格说明书
  • 【Linux】netplan配置网络;ntp搭建时间服务器;shc将脚本转二进制;ty0tty创建虚拟串口
  • C# ADO.NET 操作学习记录
  • PIT 定时器寄存器配置
  • 算法代码讲座6:最小二乘法理论原理、典型案例与MATLAB实现
  • 【深入浅出】交叉熵损失函数——原理、公式与代码示例
  • Vue实现路由守卫