如何清除IDLE shell中所有文本的屏幕?

时间:2019-06-29 17:41:44

标签: python python-3.x python-idle

我想为python游戏创建基于文本的GUI。我打算在多行文本之间移动字符。经过数小时的在线搜索,我发现的解决方案对此无效。我想要一些可以擦除屏幕上所有文本的东西,因此我可以重新打印同一行,但将字符移动一个空格。明确地说,我要擦除的屏幕是在IDLE中单击“运行模块”时出现的屏幕。另外,由于某些原因,我无法导入任何外部库,这在我的计算机上已损坏。

我已经尝试过ctrl + l。它绝对什么也没做。 我尝试使用os.system('cls')(我在Windows上),它会打开命令提示符,清除它,然后关闭它。不是我所需要的。 打印(“ \ n” * 50)有效,但无法清除屏幕。屏幕必须清晰,我不想打印一百万行。

这是我的代码:

import sys
valone = 5
valtwo = 5
# create line of text
sys.stdout.write(" a " * valone + " t " + " a " * valtwo)
# move t character 1 space
valone = valone -1
valtwo = valtwo + 1
# clear screen and redraw line with t moved 1 space.

3 个答案:

答案 0 :(得分:2)

使用IDLE的Python shell无法实现。

来自the documentation

  

Shell不会丢弃输出。

  

制表符会导致下一个制表符停止后开始以下文本。 (它们每8个“字符”出现一次)。换行符会导致以下文本出现在新行上。根据操作系统和字体,其他控制字符将被忽略或显示为空格,框或其他内容。

这是一个非常基本的shell,它以线性方式输出所有文本。您需要在其他Shell中运行Python以完成所需的操作。

答案 1 :(得分:1)

基于文本的图形用户界面(GUI)应表示“基于GUI框架的文本小部件”,例如IDLE使用的Python跨平台tkinter模块。当前,IDLE Shell并非旨在简化您的操作。相反,您可以使用Label或Text小部件编写自己的tkinter程序。以下内容可以帮助您开始。

import tkinter as tk
r = tk.Tk()
f = 'TkFixedFont'
s = 'X         '
sv = tk.StringVar(r)
l = tk.Label(r, font=f, textvariable=sv)
sv.set(s)
t = tk.Text(r, font=f, height=1, width=10)
t.insert('1.0', 'X')

n = 0  # index of marker
i = 200  # milliseconds between moves

def moveright():
    global n, s
    if n < 9:
        s = ' ' + s[:-1]
        sv.set(s)
        t.insert('1.0', ' ')
        n += 1
        r.after(i, moveright)
    else:
        moveleft()

def moveleft():
    global n, s
    if n:
        s = s[1:] + ' '
        sv.set(s)
        t.delete('1.0', '1.1')
        n -= 1
        r.after(i, moveleft)
    else:
        moveright()

l.pack()
t.pack()
r.after(i, moveright)
r.mainloop()

答案 2 :(得分:0)

您也许可以使用curses来做到这一点。它内置在Linux上的Python等上。 ,但对于Windows,则需要安装windows-curses library

完成此操作后,可以使用.clear()方法:

from curses import initscr

stdscr = initscr()
stdscr.clear()
stdscr.refresh()

当然,这取决于解决安装外部模块的问题。如果不这样做,或者使用Windows之外的其他工具,恐怕您会陷入困境。

此外,我不确定在IDLE下运行时是否可以正常运行,如果不能运行,则只需从cmd提示符下运行程序即可。

编辑:我最初提到UniCurses库,但是它似乎并没有得到很好的支持,因此我将其更改为windows-curses,这似乎是一个在Windows上运行的内置curses补丁。