Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何清除空闲shell中所有文本的屏幕?_Python_Python 3.x_Python Idle - Fatal编程技术网

Python 如何清除空闲shell中所有文本的屏幕?

Python 如何清除空闲shell中所有文本的屏幕?,python,python-3.x,python-idle,Python,Python 3.x,Python Idle,我想为python游戏创建一个基于文本的GUI。我打算在多行文本之间移动一个字符。经过数小时的在线搜索,我找到的解决方案并不适用于此。我想要的东西,将删除屏幕上的所有文字,所以我可以重新打印同一行,但与字符移动一个空间。要明确的是,我要擦除的屏幕是在空闲状态下点击“运行模块”时出现的屏幕。此外,我无法导入任何外部库,因为出于某种原因,这在我的计算机上被破坏 我试过ctrl+l。它什么也没做。 我尝试过使用os.system('cls')(我在windows上),它会打开命令提示符,清除它,然后关

我想为python游戏创建一个基于文本的GUI。我打算在多行文本之间移动一个字符。经过数小时的在线搜索,我找到的解决方案并不适用于此。我想要的东西,将删除屏幕上的所有文字,所以我可以重新打印同一行,但与字符移动一个空间。要明确的是,我要擦除的屏幕是在空闲状态下点击“运行模块”时出现的屏幕。此外,我无法导入任何外部库,因为出于某种原因,这在我的计算机上被破坏

我试过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.

这在IDLE的pythonshell中是不可能的

发件人:

Shell从不丢弃输出

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


这意味着它是一个非常基本的shell,以线性方式输出所有文本。您需要在另一个shell中运行Python来完成您想要的任务。

您可以使用
诅咒来完成这一任务。它内置于Python for Linux的etl上。al,但对于Windows,您需要安装

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

from curses import initscr

stdscr = initscr()
stdscr.clear()
stdscr.refresh()
当然,这取决于如何解决安装外部模块的问题。如果不这样做,或者不使用Windows以外的其他工具,恐怕你会被卡住

另外,我不确定在空闲状态下运行时是否有效,但如果不行,只需在cmd提示符下运行程序即可


编辑:我最初提到了
UniCourses
库,但它似乎没有得到很好的支持,因此我将其改为
windows curses
,它似乎是内置的
curses
的一个补丁,用于在windows上工作。

基于文本的图形用户界面(GUI)应该意味着“基于GUI框架的文本小部件”,例如Python附带的跨平台tkinter模块,IDLE使用该模块。目前,IDLE外壳的设计目的不是为了方便您的操作。相反,您可以使用标签或文本小部件编写自己的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()
将tkinter作为tk导入
r=tk.tk()
f='TkFixedFont'
s='X'
sv=tk.StringVar(r)
l=tk.Label(r,font=f,textvariable=sv)
sv.组(s)
文本(r,字体=f,高度=1,宽度=10)
t、 插入('1.0','X')
n=0#标记索引
i=移动间隔200毫秒
def moveright():
全局n,s
如果n<9:
s=''+s[:-1]
sv.组(s)
t、 插入('1.0','')
n+=1
r、 在(i,moveright)之后
其他:
左移()
def moveleft():
全局n,s
如果n:
s=s[1:][+''
sv.组(s)
t、 删除('1.0'、'1.1')
n-=1
r、 之后(i,向左移动)
其他:
moveright()
l、 包()
t、 包()
r、 在(i,moveright)之后
r、 mainloop()

换一种说法:当接收用户程序的输出时,空闲外壳目前几乎模仿在哑终端(如旧打印终端)上运行的Python。在Windows上,系统控制台在过去几年中进行了升级,以便能够充当ANSI终端。因此,Windows curses库需要重新安装最近升级以充分利用控制台改进。谢谢,@TerryJanReedy!
windows curses
似乎得到了定期更新,并且基于
PDCurses
,但最终我不知道它是否支持更新的windows版本。