跨平台文本ui库

vindauga的Python项目详细描述


Vindauga

简介

这是一个纯BSD实现的BSD许可的C++ turbo Vision库。

vindauga是挪威语中英文单词"window"的前身。这些窗户真旧…

对于一个项目,我需要一个跨平台的tui for python,并且可用的项目可以在windows或unix上运行,但不能 两者都有。我以前用音译的方法做了一个版本,这实在是太糟糕了,所以就开始了。

此版本的优点;

  • 除了诅咒之外没有其他依赖项(请参阅下面的窗口,使其在cmd/powershell窗口中工作)
    • 当它到达时将在Windows终端中尝试(它应该可以正常工作)
  • 进行了大量重构以使代码基保持一致。
  • 它默认使用Unicode(所以没有CP437)
    • 请参见utf democyrillic test
    • 文件查看器与utf-8编码的文件一起工作,请参见utf demo
    • 然而,Unicode数据输入是另一回事,这仍然是一个问题。
    • gettext已启用,因此您可以使用内置的,但现在没有提取功能。
  • 在DOS窗口和cygwin、putty等中可以使用curses mouse。
  • 有些东西是蟒蛇的。
    • 有些仍然有点笨重,正在使用中。
  • 您可以动态地将控制台窗口的"分辨率"更改为所需的大小。
    • 有关如何操作,请参见vindauga_demo
    • 这只适用于虚拟终端(包括windows cmd)。
  • 在Mac、Windows、Cygwin、Putty、X-Terms上测试
    • Mac上有很多Alt键,您必须使用Esc xxx来代替。
  • 您可以打开(交互式)Shell窗口。

我已经实现了像组合框这样的其他小部件,所以有一些额外的小部件可用ootb。 我已经将这些示例组合在一起并进行了转换,所以这里有示例代码。 我试图在适当的地方保留原始的类和方法文档。

您当前被限制为1024个宽度的窗口,可以在vindauga.types.draw_buffer或子类中对此进行调整 drawbuffer如果真的有问题。如果您正在对绘图缓冲区进行线性处理,那么它将增长 无论您想要多大的尺寸,但如果您想要预先分配,则为1K。

demo

窗口

如果要在命令窗口中使用它,使用本机python,则需要pip install windows curses 工作正常。

您还需要安装pywin32库。

终端在从命令提示符回显stdin时出现缓冲问题。

在cygwin中运行它不需要任何东西,只需在mintty窗口中使用cygwin python即可。

使用它

示例目录中查找如何使用小部件的小示例。 vindauga演示版vindauga_demo展示了如何将所有内容整合到一个更大的应用程序中。

在大多数情况下,您需要将应用程序子类化并添加自己的菜单对象。

这个例子非常简单,尽管它什么也不做 除了使用默认的statusline渲染背景之外,它允许您退出alt+x

# -*- coding: utf-8 -*-fromvindauga.widgets.applicationimportApplicationfromvindauga.widgets.desktopimportDesktopclassDemo(Application):"""    How to __change the background _pattern    """def__init__(self):Desktop.DEFAULT_BACKGROUND='╬'super().__init__()if__name__=='__main__':app=Demo()app.run()

问题

  • 事件有时会消失,特别是在powershell窗口中单击鼠标。点击然后选项卡,然后单击 到达。
  • 屏幕类做得太多,需要对其进行分解才能将IO移动到它自己的层次结构中
  • 需要添加更多的测试。
  • 尚未支持控制台鼠标
  • 我还没有将所有的模块导入收集到\uu init.py我还不确定。
    • 这意味着有很多导入行,但这意味着你只导入你需要的,而且 你所使用的是明确的。

贡献

python版本

我的目标是python 3.7+(它应该与3.6一起使用dataclassesbackport)

类和变量名

  • 出于各种原因,它不使用pep-8命名。
    • 命名为camel case
    • 类首先是大写的;例如classname
    • 变量先小写;例如variablename
    • 缩略词应为上等,并用下划线分隔,以防止在上运行;例如myhttp_service

文件名

  • 文件名应全部小写,以防止在不区分大小写的文件系统上出现问题。
  • 它应该指示在中定义的主类,用下划线分隔的单词,例如class\u name.py
    • 可运行文件名(如示例中所示)应使用短划线而不是下划线,例如my test.py
      1. 这样可以防止从中意外导入
      2. 允许您在小部件后面命名示例,而不必使用相互冲突的名称。

层次结构

一般;

  • 简单视图应该位于widgets
  • 数据请求在对话框下进行
  • 小工具下的复杂事物例如有自己窗口的事物。

如果需要跨越多个文件,请将内容移动到子模块中

如果您制作了一个小部件,请在示例中添加一个示例用例

调试

显然,使用print()是行不通的,所以使用日志记录模块并在日志记录的前面加上vindauga。 您可以使用postmessagefromwidgets.message_window登录到Vindauga窗口。 参见info box.py

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何获取所有链接并使用SeleniumWebDriver逐个单击这些链接   java中数组列表的arraylist移位元素   java如何存储具有不同类型参数的元素   java不能使用List<Future<?>>当从不同位置调用时,在方法参数中   java我应该如何修复代码以避免测试代码出错?   安卓 PreferenceFragment java。lang.RuntimeException   java在运行emulator时发现错误   java取消多个AsyncTask回调的有效方法是什么?如果中途满足条件,这些回调将在将来返回?   有没有办法在运行时将方法动态分配给Java类?   java如何将propertyfile与GlassFish一起使用   如何在PHP中使用bcrypt对密码进行哈希处理?   Java和UDP web服务器   java JPA允许EntityListeners执行JPA操作吗?   java执行do while语句时不会产生错误   java无法在edittext中显示数据库中的数据   java Tomcat中活动会话的数量   java在何处使用@SuppressWarnings(“requestfactory”)   netty连接中的java HornetQ异常