【问题标题】:Changing colour in Python 3.4在 Python 3.4 中更改颜色
【发布时间】:2015-03-28 09:16:18
【问题描述】:

我想更改输出文本的颜色。例如:

print("This text should be in Blue")
print("This text should be in red")

我已经阅读并尝试了各种方法,但均未成功。在 IDLE 中更改颜色的最简单方法是什么。

谢谢

我已经阅读了其他帖子中的建议,但我将以下内容全部以蓝色字体打印到屏幕上:

[91mprinting red colour[91m

【问题讨论】:

  • 我已经通过其他帖子中的建议,但我将以下内容全部以蓝色字体打印到屏幕上:[91mprinting red colour[91m
  • @cfh:这个问题不是重复的。 IDLE 不支持 ANSI 颜色代码。
  • @J.F.Sebastian:IDLE 作为需求已在稍后编辑。
  • @cfh:我明白了。在the 3rd revision之前,问题重复的

标签: python colors python-3.4 python-idle


【解决方案1】:

答案是,你不能用 Idle 做你想做的事。

在空闲状态下运行 Python 代码时,无法以编程方式更改标准输出文本输出的显示颜色,原因如下。 Idle Shell 和 Editor 窗口包含 tkinter Text 小部件,它们充当 tcl/tk gui 框架中的文本小部件的代理。 Shell 提示符处的语句或编辑窗口中的代码在单独的进程中运行。 Idle 捕获发送到 stdout 和 stderr 的字符串,将字符串插入到文本小部件中,并告诉 tk 将文本着色为蓝色或红色(或您在选项 -> 配置空闲 -> 突出显示中选择的任何内容)。

在代码中导入 textcolor、colorama 或任何其他模块可以更改发送到标准输出的字符串。但是当在 Text 小部件中显示字符串时,它们不会更改空闲代码处理字符串的方式。 Idle、tkinter 和 tk 都不解释文本。在 Windows 上,print('\033') andprint('\x1b')` 显示一个左箭头。 (当复制到 SO Answer 编辑框时,ESC 显示为一个带有 0、0、1、B 的正方形。当显示答案时,ESC 被忽略,不显示任何内容。)

我想在 Idle 中添加一个选项以在控制台窗口中运行编辑器代码,而 Idle 不涉及。另一个想法是在插入文本之前解释 ANSI 代码(包括颜色代码)的 Text 子类。第一个很容易;第二个需要更多的工作;两者都在不同的情况下有用,而且都在未来。

【讨论】:

  • colorama 可以将 ANSI 转义码替换为相应的 Win32 API 调用,从而为 Windows 控制台中的输出文本着色。
  • 我知道这是 colorama 使 textcolor 在无法识别 ansi 代码但不想使答案复杂化的 Windows 控制台中工作的方式。 colorama 是否在无窗口用户进程中进行 Win32 api 调用对单独进程中的 Text 小部件没有影响。我确信即使使用 -n 选项运行 Idle 也是如此。
  • 您的回答可能暗示 ANSI 代码在 Windows 上不起作用。我已经指出colorama 如何使它们在控制台中工作。它在 IDLE 内部没有任何改变。
猜你喜欢
  • 2021-01-07
  • 2014-05-26
  • 2012-11-10
  • 2014-11-05
  • 2021-11-19
  • 2019-01-24
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多