在IDLE中可以在特定位置打印字符串吗?

19 投票
4 回答
40954 浏览
提问于 2025-04-17 02:08

我知道这个问题听起来有点奇怪和傻,但我很好奇,因为我对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转义序列

撰写回答