【问题标题】:Render colored text to a ncurses window in python将彩色文本渲染到python中的ncurses窗口
【发布时间】:2017-08-15 01:53:50
【问题描述】:

我是否可以/如何在 python 中将预终端格式的彩色文本呈现到curses.window

基本上,我正在尝试在已经呈现彩色日志输出的现有控制台应用程序之上添加一些基于 curses 的简单 UI 内容,我正在尝试将其重定向到 curses window

但是,curses 似乎以某种方式关闭了控制颜色的各种控制代码。

这是一个最小的脚本,使用colorama 代替文本源:

import colorama
import curses

def run_gui():
    stdscr = curses.initscr()
    curses.start_color()
    curses.use_default_colors()

    stdscr.insertln()
    stdscr.insertln()
    stdscr.insstr(colorama.Fore.RED+'wattt'+colorama.Style.RESET_ALL)
    stdscr.insertln()
    stdscr.insstr(colorama.Fore.GREEN+'wattt'+colorama.Style.RESET_ALL)
    stdscr.insertln()
    stdscr.insstr(colorama.Fore.YELLOW+'wattt'+colorama.Style.RESET_ALL)
    stdscr.insertln()
    stdscr.refresh()

if __name__ == '__main__':

    run_gui()

这呈现:

^[[33mwattt^[[0m
^[[32mwattt^[[0m
^[[31mwattt^[[0m

有什么方法可以让 curses 允许正常的控制代码,还是我必须重新设计所有现有的颜色功能?

【问题讨论】:

    标签: python python-3.x ncurses python-curses


    【解决方案1】:

    short:后者(“返工”)。

    长:

    “正常控制代码”恰好是设备相关的; curses 为终端提供了一个与设备无关的接口。引用自manual page

    ncurses 库例程为用户提供了一个独立于终端的 合理优化的角色画面更新方法。

    实际上大多数curses实现通过terminfo-based functions提供了一个低级接口,可以让你做一些特殊的调整,但是

    • Python 的绑定不包括这些(它仅涵盖 ncurses 的一部分),并且
    • 对于建议的那种事情,它不会有用,因为它正在操纵curses旨在知道如何比您的程序更有效地管理的信息。阻止它知道屏幕上的内容会干扰 curses 的作用。

    Python 文档提到了属性,例如,在window.insstr(str[, attr])

    你的例子可以做类似的事情

    stdscr.insstr("wattt", COLOR_PAIR(COLOR_RED))
    

    您所问的问题以前曾被问过。例如:

    【讨论】:

    • 输入来自 SSH 管道,它的颜色比示例复杂得多。我真的不想尝试解析输入颜色,只是为了重建它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    相关资源
    最近更新 更多