【问题标题】:Is it possible to print a string at a certain screen position inside IDLE?是否可以在 IDLE 内的某个屏幕位置打印字符串?
【发布时间】:2011-09-12 19:14:29
【问题描述】:

编辑:我刚刚发现使用标准库“curses”可以获得类似的行为。有一些关于它是如何工作的演示,例如在 YouTube 上:http://www.youtube.com/watch?v=Bj-H9uPEa5U

我知道这是一个奇怪而愚蠢的问题,但我很好奇,因为我对 python 及其工作原理知之甚少。 从终端或使用 IDLE 时,有什么方法可以在某个屏幕位置打印字符串?

我将尝试更好地解释这一点:您还记得过去您使用 Basic 编写小程序的日子吗,可能是在 Commodore 64、Apple II 或 ZX Spectrum 上? 在那段日子里,如果你想在某个位置打印一个字符串,你曾经写过这样的东西:

10 LOCATE 30, 40:打印“hello world”

我只是想知道是否有办法告诉 python 在某个位置打印一个字符串,以及是否有办法知道 IDLE 窗口中实际显示的列数和行数。

我还做了一个模型图来解释这个概念。

【问题讨论】:

  • 如果您想要这么花哨的东西,请放弃 IDLE 并接受诅咒。或者自己重新实现一半,这是相当痛苦的。
  • 如果你要使用curses,试试它有很多简单的功能来执行相同的任务pypi.org/project/blessed(注意这个评论不是针对问题的原始发布者,而是人们结束谷歌搜索后在这里)

标签: python python-idle


【解决方案1】:

我不知道这是否适用于 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-Escape Sequences

【讨论】:

  • @Caltor:点击上面解释 Ansi Escape Sequences 的链接。这些由终端软件解释。
  • 谢谢,正是我想要的。虽然我不得不颠倒 x 和 y。
  • 我得到了这个,它不适用于窗口控制台吗? >>> print_there(0,0,'hello') ←7←[0;0fhello←8>>>
【解决方案2】:

这个问题只有一个真正的答案,而且不是一个很好的答案。方法:

import sys
def print_there(x, y, text):
     sys.stdout.write("\x1b7\x1b[%d;%df%s\x1b8" % (x, y, text))
     sys.stdout.flush()

并不完美。我建议不要在终端中做这样的事情。如果你想做 Gui 之类的东西,请使用 Pygame、Tkinter 或 Django。

【讨论】:

    【解决方案3】:

    使用 Tkinter 通过在框架下选择并提供行号和列号来显示您的输出来使其完美

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2013-10-03
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      相关资源
      最近更新 更多