社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Anonymous • 4 年前 • 996 次点击  

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

我试过ctrl+l。它什么也没做。 我试过使用os.system('cls')(我在windows上)它打开命令提示符,清除它,然后关闭它。不是我需要的。 print(“\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.
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47179
 
996 次点击  
文章 [ 3 ]  |  最新文章 4 年前
Nikolas Stevenson-Molnar
Reply   •   1 楼
Nikolas Stevenson-Molnar    5 年前

你也许可以这样做 curses 是的。它内置在python for linux上,etl。但是对于Windows,您需要安装 windows-curses library 是的。

一旦你做到了,你可以使用 .clear() 方法:

from curses import initscr

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

当然,这取决于如何解决安装外部模块的问题。如果你不这么做,或者用窗户以外的东西,恐怕你被卡住了。

另外,我不确定在空闲状态下运行时这是否有效,但如果不行,那么只需在命令提示符下运行程序。

编辑 :我最初提到 UniCurses 图书馆,但似乎不太受支持,所以我把它改成了 Windows诅咒 ,这似乎是内置的 诅咒 在窗户上工作。

Terry Jan Reedy
Reply   •   2 楼
Terry Jan Reedy    5 年前

基于文本的图形用户界面(gui)应该是指“基于gui框架的文本小部件”,例如python附带的、idle使用的跨平台tkinter模块。目前,空闲shell并不是为了方便您想做的事情而设计的。相反,您可以使用标签或文本小部件编写自己的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()
anon
Reply   •   3 楼
anon    5 年前

这在idle的python shell中是不可能的。

the documentation 以下内容:

shell从不丢弃输出。

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

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