跨平台文本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消除多个构造函数中的冗余   java如何准备和提供测试数据   java如何处理Selenium Chromedriver选择证书弹出确认?   java服务器在命名时中断。重新绑定   java如何从包含许多元素的对象中提取对象的单个元素   主方法上的java执行   用于输出棋盘的按钮的java GridLayout   java如何结合Web/移动用户身份验证   要打开以运行(windows+R)和执行命令的Java代码   java我在忘记密码的电子邮件发送过程中遇到以下错误err=javax。邮政AuthenticationFailedException这是我的代码   列出在使用泛型集合的用户定义类中实现的JAVA 8。排序()不起作用   java Apache POI写入时间大于24小时   java Hibernate通过另一个实体映射   使用Java在现有json文件中追加json对象   Spring批处理上的java停止处理   java为特定的mybatisspring映射器设置不同的执行器类型   java我想阅读html的内容,我需要用所需的文本对其进行更改