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.rhkb.cn/news/303973.html

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

相关文章

稀碎从零算法笔记Day45-LeetCode:电话号码的字母组合

题型:映射、回溯算法、递归 链接:17. 电话号码的字母组合 - 力扣(LeetCode) 来源:LeetCode 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出…

vue vue3 手写 动态加载组件

效果展示 一、需求背景: # vue3 项目涉及很多图表加载、表格加载 #考虑手写一个动态加载组件 二、实现思路 通过一个加载状态变量,通过v-if判断,加载状态的变量等于哪一个,动态加载组件内部就显示的哪一块组件。 三、实现效果…

雄安建博会:中矿雄安新区的总部开工建设

中矿落位雄安:助力国家战略与新区发展 雄安新区,作为中国未来发展的重要战略支点,正迎来一系列央企总部的疏解与建设。最近,中国矿产资源集团有限公司(简称“中矿”)在雄安新区的总部项目正式开工建设&…

防止U盘拷贝复制的软件和方法

防止U盘拷贝复制的软件和方法 防止U盘拷贝的软件旨在限制未经授权的用户从U盘中复制、移动、打印或以其他方式传播存储在其上的文件。 以下是一些具体的防U盘拷贝软件及其特点: 1、安企神软件 提供专业的U盘加密保护,可将普通U盘制作成防拷贝U盘&…

单链表专题

文章目录 目录1. 链表的概念及结构2. 实现单链表2.1 链表的打印2.2 链表的尾插2.3 链表的头插2.4 链表的尾删2.5 链表的头删2.6 查找2.7 在指定位置之前插入数据2.8 在指定位置之后插入数据2.9 删除pos节点2.10 删除pos之后的节点2.11 销毁链表 3. 链表的分类 目录 链表的概念…

蓝桥 python笔记15——矩阵运算、基础数论、GCD和LCM、质数、唯一分解定理、快速幂

目录 矩阵运算 基础数论 GCD和LCM 质数 唯一分解定理 快速幂 矩阵运算 矩阵加减法: 矩阵和数相乘: 矩阵转置: 矩阵乘法: # 矩阵乘法 def mul(A,B):N,Mlen(A),len(A[0])#行数,列数_M,Klen(B),len(B[0])if M!_M:re…

语音情感识别调研

语音情感识别调研 1、情绪识别综述2、语音情感识别算法3、语音特征提取4、相关项目1、用 LSTM、CNN、SVM、MLP 进行语音情感识别2、DST:基于Transformer的可变形语音情感识别模型3、语音情感基座模型emotion2vec4、IEEE ICME 2023论文|基于交互式注意力的…

【PyQt5篇】使用QtDesigner添加控件和槽

文章目录 &#x1f354;使用QtDesigner进行设计&#x1f6f8;在代码中添加信号和槽 &#x1f354;使用QtDesigner进行设计 我们首先使用QtDesigner设计界面 得到代码login.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0&q…

穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 结构体作为一种数据结构&#xff0c;其定义和特点决定了它在各种应用中的广泛适用性。随着科技的进步和新兴行业的不断涌现&#xf…

C++——IO流

目录 一&#xff0c;C语言的输入与输出 二&#xff0c;流是什么 三&#xff0c;C标准IO流 3.1 四个全局流对象 3.2 OJ题中的输入和输出 3.3 自定义类型重载输入和输出 四&#xff0c;C文件IO流 4.1 C文件操作步骤 4.1.1 操作文件的类 4.1.2 文件打开方式 4.1.3 文件操…

【数据下载】SODA数据更新至2022并教学下载

【数据下载】SODA数据更新至2022并教学下载 我为什么那么喜欢使用SODA数据&#xff1f; 就是三维网格化的数据&#xff0c;好用。 但是需要高分辨率还是需要找别的。 以前分享过SODA数据下载&#xff0c;但上次版本过于凌乱。因此重新借助更新再分享一次&#xff0c;不为过。…

前端mock数据——使用mockjs进行mock数据

前端mock数据——使用mockjs进行mock数据 一、安装二、mockjs的具体使用 一、安装 首选需要有nodejs环境安装mockjs&#xff1a;npm install mockjs 若出现像上图这样的错&#xff0c;则只需npm install mockjs --legacy-peer-deps即可 src下新建mock文件夹&#xff1a; mo…

Python | 超前滞后分析

Nino SST Indices (Nino 12, 3, 3.4, 4; ONI and TNI) 有几个指标用于监测热带太平洋&#xff0c;所有这些指标都是基于海表温度(SST)异常在一个给定的区域的平均值。通常&#xff0c;异常是相对于30年的周期来计算的。厄尔尼诺3.4指数(Nio 3.4 index)和海洋厄尔尼诺指数(Ocea…

【JavaWeb】Day39.MySQL概述——数据库设计-DQL(二)

数据库设计-DQL 聚合函数 聚合函数查询就是纵向查询&#xff0c;它是对一列的值进行计算&#xff0c;然后返回一个结果值。&#xff08;将一列数据作为一个整体&#xff0c;进行纵向计算&#xff09; 语法&#xff1a; select 聚合函数(字段列表) from 表名 ; 注意 : 聚合…

C++的stack和queue类(一):适配器模式、双端队列与优先级队列

目录 基本概念 stack的使用 queue的使用 适配器模式 stack.h test.cpp 双端队列-deque 仿函数 优先队列 priority_queue的使用 queue.h文件 stack.h文件 test.cpp文件 日期类的比较 商品的比较 结论 基本概念 1、stack和queue不是容器而是容器适配器&…

unable to find a medium containing a live file system解决办法!

背景&#xff1a; 用Ventoy制作U盘系统安装盘&#xff0c;只需要把ISO镜像拷进去就可以&#xff0c;可以放多少个镜像取决于U盘的大小&#xff0c;无需重复制作。Ventoy 将U盘的第一个分区默认格式化为exFAT文件系统来存放ISO文件。 但是&#xff0c;今天鲲鹏920平台安装银河…

实景三维技术在推进城市全域数字化转型的作用

4月2日&#xff0c;国家数据局发布《深化智慧城市发展推进城市全域数字化转型的指导意见&#xff08;征求意见稿&#xff09;》&#xff08;下称&#xff1a;《指导意见》&#xff09;&#xff0c;向社会公开征求意见。 《指导意见》作为推进城市数字化转型的重要文件&#xf…

蓝桥杯 交通信号 2022研究生组

问题&#xff1a; Dijstra算法变形题&#xff0c;有向边分正行和逆行方向&#xff0c;注意逆行的绿灯时间是正行的红灯时间。 这题的关键是理清从当前节点出发&#xff0c;到下一个节点是哪一时刻&#xff0c;理清这一点后&#xff0c;再跑Dijstra算法求最短路。 假设curr_t时…

美团一面,面试官让介绍AQS原理并手写一个同步器,直接凉了

写在开头 今天在牛客上看到了一个帖子&#xff0c;一个网友吐槽美团一面上来就让手撕同步器&#xff0c;没整出来&#xff0c;结果面试直接凉凉。 就此联想到一周前写的一篇关于AQS知识点解析的博文&#xff0c;当时也曾埋下伏笔说后面会根据AQS的原理实现一个自定义的同步器…

C++笔记(函数重载)

目录 引入&#xff1a; 定义&#xff1a; 易错案例&#xff1a; 引入&#xff1a; 对于实现相似功能的函数&#xff0c;在命名时&#xff0c;我们常会出现命名重复的问题。对于C语言&#xff0c;编译器遇到这种命名重复的情况&#xff0c;会进行报错。而我们的C为了更方便程…