Python TUI库npyscreen简要介绍

栏目: Python · 发布时间: 5年前

内容简介:之前的文章<<当前最新版本为4.10.5,如图:

之前的文章<< TUI库newt和snack简要介绍 >>介绍了如何使用 newt 库开发控制台应用程序。 newt 库是一个非常简单的库,只适合开发逻辑为顺序流程的程序,比如,典型的程序安装向导。当程序逻辑较为复杂时,可以直接使用 ncurses 来实现。但 ncurses 是一个较为底层的库,使用它开发工作量会较大。本文介绍一个使用更为简易但可实现复杂功能的TUI库:npyscreen。

当前最新版本为4.10.5,如图:

Python TUI库npyscreen简要介绍

Npyscreen 应用由三种对象构成:

  • Application 对象:负责应用程序的开始、结束,创建 Form 对象,处理事件, 主要有两种类型:
    NPSAppManaged
    NPSApp
    
  • Form 对象:表示包含 Widget 对象的屏幕区域,主要有以下类型:
    • FormBaseNew : 空Form
    • Form : 带有 <<OK>> 按钮的Form
    • ActionForm : 带有 <<OK>><<Cancel>> 两个按钮的Form
    • FormWithMenus : 支持Menu组件的Form
  • Widget 对象:表示各种与用户交互的组件

具体细节,可以参考 官网文档

Npyscreen 更推荐使用面向对象的编程方法,继承库中的类来自定义所需要的类,通过覆盖默认方法来扩展应用程序需要的功能。

下面我们依然实现上篇文章中的登录示例来说明 npyscreen 的简要用法。

首先直接使用 PIP 安装 npyscreen :

pip install npyscreen

我们的程序由两个 FORM 构成,第一个 FORM 用于使用者输入用户名和密码,如下图:

Python TUI库npyscreen简要介绍

当用户名和密码输入正确时,显示第二个 FORM , 它用于显示登录成功的消息,如图:

Python TUI库npyscreen简要介绍

程序源代码如下:

import npyscreen

class SuccessForm(npyscreen.Form):
    def create(self):
        self.name = "SUCCESS"
        self.wgFixedText = self.add(npyscreen.FixedText, value = "")

    def beforeEditing(self):
        username = self.parentApp.getForm('MAIN').username
        value = "User [\"%s\"] logined successed!" % (username)
        self.wgFixedText.value = value

    def afterEditing(self):
        self.parentApp.switchForm(None)

class LoginForm(npyscreen.ActionForm):
    def create(self):
        self.name = "LOGIN"
        self.parentApp.value = ""
        self.username = None
        self.password = None
        self.wgUsername = self.add(npyscreen.TitleText, name = "Username:")
        self.wgPassword = self.add(npyscreen.TitlePassword, name = "Password:")

    def beforeEditing(self):
        self.username = None
        self.password = None
        self.wgUsername.value = ''
        self.wgPassword.value = ''

    def on_ok(self):
        self.username = self.wgUsername.value
        self.password = self.wgPassword.value

        if len(self.username) == 0 or len(self.password) == 0:
            npyscreen.notify_confirm("USERNAME AND PASSWORD MUST NOT BE EMPTY!")
        else:
            if self.username != "root" or self.password != "123456":
                npyscreen.notify_confirm("INVALID USERNAME OR PASSWORD!”)
            else:
                self.parentApp.switchForm('SUCCESSFORM')

    def on_cancel(self):
        self.parentApp.switchForm(None)

class LoginApp(npyscreen.NPSAppManaged):
    def onStart(self):
        self.addForm("MAIN", LoginForm, name = "LOGIN", color = "IMPORTANT")
        self.addForm("SUCCESSFORM", SuccessForm, name = "SUCCESS", color = "WARNING")

if __name__ == '__main__':
    LoginApp().run()

首先,我们创建了一个 SuccessForm 类,它继承 npyscreen.Form 类, 它自带一个 <<OK>> 按钮。它用于显示登录成功消息。 create 方法用于初始化该 Form , 我们在其中创建了一个 FixedText 用于显示登录消息。术语 Edit 表示 Form 与用户的交互。方法 beforeEditing 在进入 Form 自身的 Edit 循环前调用,而 afterEditing 在交互完成 Form 要退出时被调用。我们在 beforeEditing 方法中将要显示的内容准备好。在 afterEditing 中通过调用 NPSAppManaged.switchForm(None) 退出程序。

另一个类 LoginForm 表示用户输入用户名和密码的 Form 。它继承 npyscreen.ActionForm , 带有一个 <<OK>><<Cancel>> 按钮。 create 方法用于初始化该 Form , 创建了两个输入框来接收用户输入。 beforeEditing 方法用于在显示前清空内容。 on_okon_cancel 方法分别处理 <<OK>> 按钮和 <<Cancel>> 按钮被触发后的逻辑。 <<OK>> 按钮触发后,我们获取并检查用户输入的内容。若输入的用户名和密码正确,则调用 NPSAppManaged.switchForm(’SUCCESSFORM’) 显示第二个 FORM 。当 <<Cancel>> 按钮触发时,退出应用程序。

LoginApp 类表示整个应用,在 onStart 方法中,我们添加了以上两个 FORM ,默认显示名称为 MAINFORM 。 最后直接调用 NPSAppManaged.run() 方法开始该程序。

整体用法上非常简单,实现多屏应用及菜单等较为复杂的功能也不困难。只是官方文档上对于很多类及方法的描述并不是很详细,很多使用细节往往需要去翻阅源码,具体的一些示例可以参考:

https://github.com/vtr0n/npyscreen

这个GITHUB作者还实现了一个基于npyscreen的Telegram客户端,如图:

Python TUI库npyscreen简要介绍

是一个非常好的复杂应用的参考示例,具体代码参考: https://github.com/vtr0n/TelegramTUI


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

蚂蚁金服

蚂蚁金服

廉薇、边慧、苏向辉、曹鹏程 / 中国人民大学出版社 / 2017-7 / 59.00

打开支付宝,我们不但可以用手机即时付款,给好友转账,为信用卡还款,购买水、电、天然气,还可以办理出国购物退税;因为余额宝,我们可以开始打理手中的零用钱,随时随地进行理财;因为芝麻信用,我们感受到信用为我们带来的信任、尊严与方便——免押金租车、租房、骑行。从支付宝到蚂蚁金服,可以毫不夸张地说,一家企业改变了我们的生活。 蚂蚁金服无疑是目前中国最具代表性的金融科技巨头,同时也是全球估值最高的金融......一起来看看 《蚂蚁金服》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试