1 回答
TA贡献1853条经验 获得超18个赞
有两种方法可以做到这一点。一种是使用win32console and win32con
,另一种是使用 ANSI 转义序列。实际上,您要做的就是将光标移动到控制台上的 0,0 处/进行打印。这是方法一:
import win32console, win32con, time
myConsole = win32console.CreateConsoleScreenBuffer(DesiredAccess = win32con.GENERIC_READ | win32con.GENERIC_WRITE, ShareMode=0, SecurityAttributes=None, Flags=1) # create screen buffer
myConsole.SetConsoleActiveScreenBuffer() # set this buffer to be active
myConsole.WriteConsole("Hello World!") # Effectively the print func.
myConsole.WriteConsoleOutputCharacter(Characters="Hello World!\0", WriteCoord=win32console.PyCOORDType(5,5)) # Print at coordinates
time.sleep(3) # this must be called or you won't see results. This is because after running the code (because there is no loop) the cmd.exe takes the console over.
这应该可以在您的控制台 FPS 中正常工作(使用 WriteConsoleOutputCharacter)。只需将命令放在 javid 放置的位置即可,这样就可以正常工作。第二种方法是使用 colorama/ANSI 序列将光标返回到起始位置。这种方法可以概括为:os.system("echo \033[0;0H")。您不能使用该print函数使用转义序列,它们不受支持(使用colorama除外)。这是一个例子:
from colorama import init
from os import system
init() # I bother with this because I use colors too. Echo prints slower than print, so don't use echo if you can avoid it.
# ... game
# ... generate string to print
print(frame) # or just use you method of printing each line.
system("echo \033[0;0H") # return cursor to home position, ready for next frame.
添加回答
举报