Py学习  »  Python

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

Anonymous • 5 年前 • 1139 次点击  

我想为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
 
1139 次点击  
文章 [ 3 ]  |  最新文章 5 年前
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来完成您想要的任务。