在IDLE中可以在特定位置打印字符串吗?
我知道这个问题听起来有点奇怪和傻,但我很好奇,因为我对Python的了解不多,也不太清楚它是怎么工作的。
在终端或者使用IDLE的时候,有没有办法在屏幕的某个特定位置打印字符串呢?
我试着更清楚地解释一下:你还记得以前用Basic编写小程序的日子吗?比如在Commodore 64、Apple II或者ZX Spectrum上?
那时候,如果你想在特定位置打印一个字符串,你可能会写类似这样的代码:
10 LOCATE 30, 40 : PRINT "hello world"
我只是好奇,Python有没有办法让你在特定位置打印字符串,还有没有办法知道在IDLE窗口里实际能显示多少列和多少行。
我还做了一个简单的图示,来解释这个概念。
4 个回答
1
使用 光标位置 的 ANSI 转义码。
print("\033[{0};{1}H{2}".format(30, 40, "Hello world"))
或者
print("\033[{0};{1}f{2}".format(30, 40, "Hello world"))
1
为了避免@user3431399提到的问题,你首先需要让Windows 终端识别ANSI/VT100转义序列。我在Windows 10的终端上遇到了和@user3431399一样的问题,我是通过@Daniel De Léon推荐的解决方案来解决的。具体来说,我以管理员身份登录了Windows命令提示符(cmd命令)。然后我复制、粘贴并运行了这个命令。
REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1
33
我不知道这个在IDLE上是否有效,但在任何普通的终端上都是可以的:
import sys
def print_there(x, y, text):
sys.stdout.write("\x1b7\x1b[%d;%df%s\x1b8" % (x, y, text))
sys.stdout.flush()
这个使用了Ansi转义序列