【问题标题】:Move cursor up using Colorama has problems at bottom of screen使用 Colorama 向上移动光标在屏幕底部有问题
【发布时间】:2016-05-08 02:20:58
【问题描述】:

我在 Windows 7(64 位)上的 Python(32 位 2.7.2)中使用 Colorama,它非常适合在控制台中为文本着色,但我在让它移动光标时遇到问题.

具体来说,如果我使用 ANSI 代码上一行,当光标远离屏幕底部时它可以工作,但是当光标靠近底部时,光标不会正确向上移动,然后是文本开始在页面下方打印,导致页面滚动。

我用来上移一行的代码是:

sys.stdout.write('\x1b[4A')

其中 4 将其向上移动四行(类似 '\x1b[8A' 会将其向上移动八行)

我不确定这是否是我对 ANSI 代码的工作原理缺乏了解,或者这是否是 Colorama 的问题。

要重新创建它,请在普通的 Windows 命令提示符 (cmd.exe) 或 Console2 中运行类似的内容(似乎没有区别)

from __future__ import print_function
import colorama
from colorama import Fore, Back, Style
import sys

def main():

    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    sys.stdout.write('\x1b[6A')
    sys.stdout.write('some text')

if __name__ == '__main__':
    main()

如果您在屏幕顶部附近运行上面的代码,它会在“Blah”输出的中间部分写入“some text”,但是,如果您在屏幕底部附近启动它,“some text”将在末尾,光标似乎根本没有向后滚动。

我特别需要将光标向上移动,所以它是相对于其他输出放置的,而不是给它一个绝对的屏幕位置(即移动到位置 x,y)

关于从哪里开始有什么建议吗?

【问题讨论】:

  • 你有没有得到这个工作?如果是这样,您可以发布下面的代码并接受答案以减少 SO 上未回答的问题总数

标签: python ansi colorama


【解决方案1】:

colorama.init() 需要添加。它在 Windows 中是必不可少的,但在 *nix 系统中是可选的。

在 Windows 上,调用 init() 将从发送到 stdout 或 stderr 的任何文本中过滤掉 ANSI 转义序列,并将它们替换为等效的 Win32 调用。在其他平台上,调用 init() 无效。

要在程序退出之前停止使用 colorama,只需调用 deinit()。这会将 stdout 和 stderr 恢复为其原始值,从而禁用 Colorama。要再次使用 Colorama,请致电reinit();再次拨打init() 更便宜(但做同样的事情)。

colorama.init() 接受一些 **kwargs 来覆盖其默认行为。

默认为

colorama.init(convert = True, wrap = True, autoreset=False, strip = None)

init(autoreset=True) 将在每条语句后重置颜色/换行/条带更改。

colorama.init(autoreset=True) # 将每条语句的颜色重置为默认值

colorama.init(convert = True) # 工作方式与 colorama.init() 相同

colorama.init(convert = False) # 当我们想停止颜色变化时使用

colorama.init(wrap = True)# 的工作方式与 colorama.init() 相同

colorama.init(convert = False) # 当我们想停止颜色变化时使用

【讨论】:

    【解决方案2】:

    在尝试向上移动光标之前,您应该从 colorama 导入“init”并调用“init()”。

    【讨论】:

      猜你喜欢
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多