urwid,一个好用的 Python 库!

更多资料获取

📚 个人网站:ipengtao.com


大家好,今天为大家分享一个好用的 Python 库 - urwid。

Github地址:https://github.com/urwid/urwid


Urwid 是一个功能强大的 Python 库,用于创建基于文本的用户界面(TUI)和终端应用程序。它提供了丰富的小部件和布局管理器,使开发者可以轻松构建具有交互性的终端界面。本文将详细介绍 Urwid 库的特性、用法,并通过丰富的示例代码展示其在实际项目中的应用。

Urwid 简介

Urwid 是一个纯 Python 实现的终端用户界面库。

Urwid主要特点:

  1. 丰富的小部件: Urwid 提供了多种小部件,如按钮、文本框、列表框等,可以构建复杂的终端界面。
  2. 灵活的布局管理: Urwid 支持多种布局管理器,如列布局、行布局、框架布局等,可以灵活地组织界面结构。
  3. 自定义主题: 开发者可以通过自定义主题来美化界面,包括颜色、字体等方面的设置。

安装 Urwid 库

要开始使用 Urwid 库,首先需要安装它。

可以使用 pip 命令来安装:

pip install urwid

安装完成后,可以在 Python 代码中引入 Urwid 库,并开始使用其提供的功能。

import urwid

Urwid 的基本用法

通过几个示例来展示 Urwid 库的基本用法。

创建文本框

import urwid# 创建文本框
text_box = urwid.Edit("请输入文本:")# 创建主循环对象并运行
loop = urwid.MainLoop(text_box)
loop.run()

创建按钮

import urwid# 创建按钮
button = urwid.Button("点击我")# 按钮点击事件处理函数
def on_button_click(button, data=None):button.set_label("已点击")urwid.connect_signal(button, "click", on_button_click)# 创建主循环对象并运行
loop = urwid.MainLoop(button)
loop.run()

创建列表框

import urwid# 列表框内容
content = [urwid.Text("Item 1"),urwid.Text("Item 2"),urwid.Text("Item 3"),
]# 创建列表框
list_box = urwid.ListBox(urwid.SimpleListWalker(content))# 创建主循环对象并运行
loop = urwid.MainLoop(list_box)
loop.run()

Urwid 的高级用法

除了基本的用法之外,Urwid 还提供了一些高级功能,以满足更复杂的终端界面需求。

自定义小部件

import urwid# 自定义小部件
class CustomWidget(urwid.WidgetWrap):def __init__(self, text):widget = urwid.Text(text)super().__init__(widget)# 使用自定义小部件
custom_widget = CustomWidget("这是自定义小部件")
loop = urwid.MainLoop(custom_widget)
loop.run()

自定义主题

import urwid# 创建自定义主题
custom_palette = [("body", "black", "light gray"),("footer", "white", "dark red"),
]# 创建文本框和尾部部件
text_box = urwid.Edit("请输入文本:")
footer = urwid.Text("这是底部信息")# 创建主循环对象并运行
loop = urwid.MainLoop(urwid.Pile([text_box, footer]), palette=custom_palette)
loop.run()

实际项目中的应用

当在实际项目中使用 Urwid 库时,通常会涉及到一些更加复杂的场景和需求。

1. 命令行工具界面设计

在开发命令行工具时,通常需要设计一个用户友好的界面来交互和显示信息。Urwid 提供了丰富的小部件和布局管理器,可以轻松实现这一需求。

import urwid# 创建命令行工具界面
def create_cli_interface():# 创建文本框和按钮text_box = urwid.Edit("请输入命令:")button = urwid.Button("执行")# 按钮点击事件处理函数def on_button_click(button, data=None):command = text_box.get_edit_text()# 执行命令并显示结果result = execute_command(command)result_text.set_text(result)urwid.connect_signal(button, "click", on_button_click)# 创建结果显示文本框result_text = urwid.Text("执行结果将显示在这里")# 创建界面布局layout = urwid.Pile([text_box, button, result_text])return layout# 模拟执行命令的函数
def execute_command(command):# 这里模拟执行命令的过程,实际项目中需替换为真实的命令执行逻辑return f"执行命令:{command}"# 创建主循环对象并运行
loop = urwid.MainLoop(create_cli_interface())
loop.run()

2. 终端监控和控制界面

对于需要监控和控制远程服务器或设备的项目,可以使用 Urwid 创建一个终端监控和控制界面,方便用户实时查看和操作。

import urwid# 创建监控和控制界面
def create_monitoring_interface():# 创建监控信息显示框monitor_text = urwid.Text("监控信息将实时显示在这里")# 创建停止按钮stop_button = urwid.Button("停止监控")# 停止按钮点击事件处理函数def on_stop_button_click(button, data=None):# 停止监控逻辑stop_monitoring()monitor_text.set_text("监控已停止")urwid.connect_signal(stop_button, "click", on_stop_button_click)# 创建界面布局layout = urwid.Pile([monitor_text, stop_button])return layout# 模拟停止监控的函数
def stop_monitoring():# 这里模拟停止监控的过程,实际项目中需替换为真实的停止监控逻辑pass# 创建主循环对象并运行
loop = urwid.MainLoop(create_monitoring_interface())
loop.run()

3. 终端游戏界面开发

如果正在开发一个终端游戏,Urwid 提供了丰富的小部件和事件处理机制,可以实现复杂的游戏界面和交互逻辑。

import urwid# 创建游戏界面
def create_game_interface():# 创建游戏地图map_text = urwid.Text("游戏地图将显示在这里")# 创建玩家信息显示框player_info_text = urwid.Text("玩家信息将实时显示在这里")# 创建界面布局layout = urwid.Pile([map_text, player_info_text])return layout# 创建主循环对象并运行
loop = urwid.MainLoop(create_game_interface())
loop.run()

总结

Python的Urwid库是一个功能强大的终端用户界面(TUI)库,提供丰富的小部件和布局管理器,可以轻松创建交互性强的终端界面。通过Urwid库,开发者可以快速构建命令行工具界面、终端监控和控制界面以及终端游戏界面等各种应用。其灵活性和丰富的功能使得Urwid在实际项目中具有广泛的应用价值,是开发终端应用程序的理想选择。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[23年蓝桥杯H题] 合并石子

问题描述 在桌面从左至右横向摆放着 N 堆石子。每一堆石子都有着相同的颜色,颜 色可能是颜色 0 ,颜色 1 或者颜色 2 中的其中一种。 现在要对石子进行合并,规定每次只能选择位置相邻并且颜色相同的两堆 石子进行合并。合并后新堆的相对位置保…

unipush+个推实现消息推送

1.注册个推平台的帐号个推,专业的数据智能服务商-为垂直领域提供数据智能解决方案 2.应用列表中选择新增应用/服务 3.填写下应用信息4.创建好应用后在manifest.json中的sdkConfigs配置上写入appid、appkey、appsecret "sdkConfigs" : {"ad" :…

【Keil5-Boot和APP配置】

Keil5-Boot和App配置 ■ Keil5-Boot和APP配置■ 一:sct文件 sct文件配置■ 二:发布版本不需要在 C/C,Asm,Linker,中添加 CMDDEBUG 宏定义。■ 三:Debug版本需要在Linker添加 --pd"-DCMDDEBUG" 才…

windows版本-idea中下载的java版本在哪

1、点击idea的file-projectStructure 进入: 通过电脑目录进入该目录 找到bin目录,copy该目录地址 copy下来之后设置到系统环境变量中

脑电放大 LM386

LM386介绍 LM386 是一种音频集成功放,具有自身功耗低、电压增益可调整电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。 电源电压 4-12V 或 5-18V(LM386N-4);静态消耗电流为 4mA;电压增益为20-200dB;在引脚1和8开路时&a…

scan纯享代码 java

scan纯享代码 java 1 scan用法2 next3 nextLine 1 scan用法 在录入中间有回车的字符串的时候,不要使用next()和nextLine()的配合!! scan用法 Scanner scannernew Scanner(System.in); String…

【通信原理笔记】【三】模拟信号调制——3.5 角度调制(FM、PM)与其频谱特性

文章目录 前言一、相位与频率二、PM和FM的数学表示三、FM的频谱四、FM信号的带宽——卡松公式总结 前言 在之前介绍的几种调制方式中,我提到信噪比时计算的是用户解调后的信噪比,然而在北邮通信原理课中考虑的是解调器输入的信噪比,即考虑的…

python 图片 中文识别 pytesseract

python 图片 中文识别 pytesseract 参考链接 https://blog.csdn.net/weixin_47754149/article/details/125651707 微信 中 长截图,然后传到 电脑上面 安装 方法 https://digi.bib.uni-mannheim.de/tesseract/ tesseract-ocr-w64-setup-5.3.3.20231005.exe 安装的…

linux常用目录结构(目录命令)--6986字详谈

前面与大家讨论了linux的发展与由来(这一块挺多的,小编还没有编写完成,希望大家理解),紧接着谈到了vmware安装及运行所存在的故障(鉴定错误,虚拟机没有网,蓝屏等常见现象的总结及处理…

【vim 学习系列文章 20 -- a:mode 的值有哪些?】

请阅读【嵌入式开发学习必备专栏 之 Vim】 文章目录 a:mode 的值有哪些?举例Vim 底部状态栏设置 a:mode 的值有哪些? 在 Vim 脚本语言中,a:mode 常常用于函数内部,以获取该函数被调用时 Vim 正处于的模式。它主常用于那些可以从不同模式下被调用的函数…

what is tty?

waht is tty? 黑话:TTY 为什么使用Linux的时候CtrlC就会终止一个命令运行,ta是如何设置的? stty -a 桌面切换 CTRL ALT F1 – 锁屏 CTRL ALT F2 – 桌面环境 CTRL ALT F3 – TTY3 CTRL ALT F4 – TTY4 CTRL ALT F5 – TTY5 CTRL ALT F6 – TTY6

力扣HOT100 - 239. 滑动窗口最大值

解题思路&#xff1a; class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums.length 0 || k 0) return new int[0];Deque<Integer> deque new LinkedList<>();int[] res new int[nums.length - k 1];// 未形成窗口for(int i 0; i <…

ITK 重采样 resample

Itk 重新采样有二多种情况&#xff0c;这里说二种情况 1. 输入参数 &#xff0c;和输出相关数据&#xff0c;输出范围&#xff0c;spacing &#xff1b; typedef itk::Image< float, 3 > itkFloatImageType;typedef itk::ResampleImageFilter < itkFloatImageType, i…

实验:基于Red Hat Enterprise Linux系统建立RAID磁盘阵列

目录 一. 实验目的 二. 实验内容 三. 实验设计描述及实验结果 什么是磁盘阵列&#xff08;RAID&#xff09; 1. 为虚拟机添加4块大小为20G的硬盘nvme0n【2-5】&#xff0c;将nvme0n【2、3、4】三块硬盘 建立为raid5并永久挂载&#xff0c;将RAID盘全部空间制作逻辑卷&#…

【日期】获取当天以及未来三天的日期和周几

// 获取当天以及未来三天的日期和周几getDates() {const today new Date();const dayOfWeek ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];const todayDate today.toDa…

nandgame中的Grammar(语法)

题目说明&#xff1a; 语法定义涉及数字、括号和运算符和-的表达式的语法。起始符号为Expression。一个表达式应该对应于以下之一&#xff1a;一个数字标记Expression ExpressionExpression - Expression- Expression( Expression ) level help 通过语法来描述高级语言的…

SMT用料全检抽检

下载地址百度网盘&#xff1a; https://pan.baidu.com/s/1kDn_l8P6ReC4Lj5tgt-v4w?pwd5y41 提取码:5y41 1、扫描输入车间线体 2、根据线体获取在线订单 3、选择(全检|抽检|换接新料)开始 4、根据提示扫描站位和料号核对 5、核对成功再扫描核对下一组

【复现】用友NC-Cloud文件上传漏洞_70

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 用友NC Cloud大型企业数字化平台&#xff0c;深度应用新一代数字智能技术&#xff0c;完全基于云原生架构&#xff0c;打造开放、…

【石上星光】context,go的上下文存储并发控制之道

目录 1 引言2 What&#xff1f;3 How&#xff1f; 3.1 用法一、上下文数据存储3.2 用法二、并发控制 3.2.1 场景1 主动取消3.2.2 场景2 超时取消 3.3 用法三、创建一个空Context&#xff08;emptyCtx&#xff09; 4 Why&#xff1f; 4.1 go中的上下文思想 4.1.1 上下文是什么…

python爬虫———激发学习兴趣的案列(第十三天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…