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