Python隐藏已打印的文本

时间:2016-03-05 11:43:10

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

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

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

  • 完全清除当前终端,这样任何一个玩家都无法滚动并看到其他玩家的棋盘。我知道unix' clear'命令,但它并没有达到我之后的效果,并且不适用于所有操作系统(尽管这可能是我为了工作而必须牺牲的东西)溶液)

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

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我个人只是使​​用它。

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

答案 2 :(得分:0)

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

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

研究GUI界面,并尝试制作游戏。否则,您可以让我尝试创建一个解释性的代码片段,向您展示如何使用tkinter。如果你这样做,请将你拥有的游戏链接到我,这样我就能理解你想要的东西。

答案 3 :(得分:0)

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

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

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

因此,如果您的电路板有n行,在用户输入之后,您可以将光标向上移动n行+但是用户输入需要很多行,所以如果你写了{{1然后你会去Input row, col: ...等等......

一个简单的例子:

n+1