我目前正在使用python 2.7,我在编写这个想法时遇到了一些麻烦。我知道在python 2.7的终端中使用colorama或termcolor等库来为文本添加颜色很容易,但是这些方法并没有像我想要的那样工作。
你知道,我正在尝试创建一个基于文本的冒险游戏,它不仅具有彩色文本,而且在这样做时也提供了快速的打字机式效果。我有打字机效果,但是当我尝试将它与色彩库集成时代码失败,给我原始的ASCII字符而不是实际的颜色。
import sys
from time import sleep
from colorama import init, Fore
init()
def tprint(words):
for char in words:
sleep(0.015)
sys.stdout.write(char)
sys.stdout.flush()
tprint(Fore.RED = "This is just a color test.")
如果您运行代码,您将看到打字机效果有效,但颜色效果却没有。有没有什么方法可以将颜色“嵌入”到文本中,以便sys.stdout.write会用它显示颜色?
谢谢
修改
我想我可能找到了一种解决方法,但用这种方法改变单个单词的颜色有点痛苦。显然,如果在调用tprint函数之前使用colorama设置ASCII颜色,它将以最后设置的颜色打印。
以下是示例代码:
print(Fore.RED)
tprint("This is some example Text.")
我希望对我的代码有任何反馈/改进,因为我真的想找到一种方法在tprint函数中调用Fore库而不会导致ASCII错误。
答案 0 :(得分:1)
TL; DR:在您的字符串前加上所需的Fore.COLOUR
,不要忘记Fore.RESET
。
首先 - 酷打字机功能!
在您的解决方法中,您只是以红色打印 nothing (即''),然后默认情况下,您打印的下一个文本也是红色。随后的所有文本都将显示为红色,直到您Fore.RESET
颜色(或退出)。
更好的(更多 pythonic ?)方式是直接明确构建您想要的颜色的字符串。
这是一个类似的示例,预先挂起Fore.RED
并在发送到Fore.RESET
函数之前将tprint()
附加到字符串中:
import sys
from time import sleep
from colorama import init, Fore
init()
def tprint(words):
for char in words:
sleep(0.015)
sys.stdout.write(char)
sys.stdout.flush()
red_string = Fore.RED + "This is a red string\n" + Fore.RESET
tprint(red_string) # prints red_string in red font with typewriter effect
为了简单起见,将tprint()
功能放在一边,这种颜色键入方法也适用于字符串的连接:
from colorama import init, Fore
init()
red_fish = Fore.RED + 'red fish!' + Fore.RESET
blue_fish = Fore.BLUE + ' blue fish!' + Fore.RESET
print red_fish + blue_fish # prints red, then blue, and resets to default colour
new_fish = red_fish + blue_fish # concatenate the coloured strings
print new_fish # prints red, then blue, and resets to default colour
更进一步 - 构建具有多种颜色的单个字符串:
from colorama import init, Fore
init()
rainbow = Fore.RED + 'red ' + Fore.YELLOW + 'yellow ' \
+ Fore.GREEN + 'green ' + Fore.BLUE + 'blue ' \
+ Fore.MAGENTA + 'magenta ' + Fore.RESET + 'and then back to default colour.'
print rainbow # prints in each named colour then resets to default
这是我在Stack上的第一个答案,所以我没有发布终端窗口输出图像所需的声誉。
official colorama docs有更多有用的例子和解释。希望我没有错过太多,祝你好运!