【问题标题】:Python hide already printed textPython隐藏已经打印的文本
【发布时间】:2016-06-19 05:28:30
【问题描述】:

我正在创建一个简单的两人棋盘游戏,每个玩家必须在自己的棋盘上放置棋子。我想做的是:

  • 为两个玩家打开一个新的终端窗口(无论程序在哪个操作系统上运行),以便将棋盘保存在变量中,但其他玩家无法向上滚动以查看他们放置棋子的位置。

  • 完全清除当前终端,这样任何玩家都无法滚动并看到其他玩家的棋盘。我知道 unix 'clear' 命令,但它没有达到我想要的效果,并且不适用于所有操作系统(尽管这可能是我必须牺牲的东西才能获得有效的解决方案)

我已尝试清除屏幕,但无法完全删除所有文本。我没有偏好;哪种方法更容易。此外,如果使用我没有想到的不同方法会更容易,欢迎所有其他建议。提前致谢!

编辑:其他解决方案显示文本已被清除,但用户仍可以向上滚动并查看已清除的文本。我想要一种方法来删除用户可以看到此文本的任何方式。

编辑 2:请阅读其他答案和 cmets,因为它们提供了有关整个主题的大量信息。特别感谢@zondo。

【问题讨论】:

  • clear terminal in python的可能重复
  • 这仍然允许用户向上滚动并查看应该清除的文本。我正在寻找一种解决方案,如果可能的话,用户无法再次看到此文本?
  • 不要只阅读最佳答案。那里有答案,可以做你想做的事。例如,print('\033c') 在 Linux 上为我工作。
  • 抱歉,我没看到。它适用于我在 linux 上,但它适用于其他操作系统吗?
  • 我不知道。我没有其他人可以测试它。

标签: python python-3.x new-window tui


【解决方案1】:

我个人只是使​​用这个。

import os
os.system("cls" if os.name == "nt" else "clear") #"cls" for Windows, otherwise "clear"

【讨论】:

  • 我已经尝试过了,但您仍然可以向上滚动并查看事先打印的任何内容。例如。使用 for 循环打印一定数量的文本,然后使用 os.system('cls' if os.name == 'nt' else 'clear') 似乎可以清除终端,但用户仍然可以向上滚动并查看无论如何,文本。
  • @MichaelMorgan 有趣。我没有意识到是这样的。
  • @MichaelMorgan: as I said,答案对我来说很好。
【解决方案2】:

你可能不喜欢这个,它比基本的两人棋盘游戏要高一点,但总是使用某种 GUI。 我个人喜欢 tkinter。

您不希望人们向上滚动查看打印文本的选项,但您无法删除已打印的内容,这就像要求打印机从页面上去除墨水一样。它会一直留在那里。

研究一个 GUI 界面,并尝试在其中制作游戏。否则,您可以让我尝试创建一段解释性代码,向您展示如何使用 tkinter。如果你这样做,请将你拥有的游戏链接给我,以便我了解你想要什么。

【讨论】:

  • 我计划围绕它开发一个 GUI,但我很好奇是否有一种方法可以在图形环境中实现简单(ish)但在基于文本的环境中。跨度>
  • 清除终端屏幕和要求打印机从页面上清除墨水之间存在区别:清除终端屏幕有多种方式。
  • 教我你的奇妙方法@zondo 我对此一无所知。据我所知,没有办法用简单的代码实际做到这一点。
  • 他们不是我的奇妙的方式:)。我在问题下方给出了一个非常相似的链接。接受的答案只会清除可见的内容,但还有其他答案可以清除所有内容。
【解决方案3】:

考虑使用便携式终端处理库。它们抽象出常见任务的系统规范,例如擦除“屏幕”(即终端),或将输出放置在“屏幕”上的特定位置(再次,即文本终端)。但是,要有效地使用这样的库,您通常必须切换到其在屏幕上生成输出的风格,而不是天真的 printing 字符串。

curses 就是这样一个库(基于 C 库 ncurses)并包含在 Python 标准库中。要开始使用,请务必查看 Python 官方文档中的 curses tutorial

【讨论】:

  • 我刚刚在文档中看到,Windows 版本的 Python 不包含 curses 模块。 Newer versions of the tutorial 提及 UniCurses package 作为替代。
  • 也许 OP 不需要 curses(它的 Windows 模拟),而像 colorama + blessings 这样更轻的东西就足够了。
【解决方案4】:

我会推荐一个简单的 ANSI 转义码来将光标位置 Cursor Escape Codes 移动到板的开头。还有一个 ANSI 转义码可以完全清除控制台,所以你可以选择。

如果你在 windows 上,你必须先导入 colorama 一个模块,使 windows 提示符能够使用 ANSI 代码:

import colorama   # OR: from colorama import init
colorama.init()   # AND THEN: init()

因此,如果您的董事会有n 行,在轮到他们的用户输入之后,您将光标向上移动n 行+无论用户输入需要多少行,所以如果您写Input row, col: ... 那么您会去UP n+1等...

一个简单的例子:

numLines = 1
print("Hello world!")
print("\033[<{0}>A".format(numLines), "This came AFTER hello world line")

【讨论】:

  • 对我来说,我必须从 ANSI 代码中删除 ("\033[{0}A".format(numLines))。
  • ANSI 转义码有时会因操作系统而异,我发现大多数情况下最好的方法是尝试和错误
猜你喜欢
  • 2021-11-04
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多