Как очистить экран от ВСЕГО текста в оболочке IDLE? - PullRequest
2 голосов
/ 29 июня 2019

Я хочу создать текстовый графический интерфейс для игры с питоном.Я намерен переместить символ между несколькими строками текста.после нескольких часов поиска в Интернете, решения, которые я нашел, не работают для этого.Я хочу что-то, что сотрет весь текст на экране, чтобы я мог перепечатать ту же строку, но с символом, перемещенным на один пробел.Чтобы было ясно, экран, который я хочу стереть, - это экран, который появляется, когда вы нажимаете «Запустить модуль» в IDLE.Кроме того, я не могу импортировать какие-либо внешние библиотеки, потому что по какой-то причине это не работает на моем компьютере.

Я пробовал 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.

Ответы [ 3 ]

2 голосов
/ 29 июня 2019

Это невозможно с оболочкой IDLE Python.

Из документации :

Оболочка никогда не выбрасывает вывод.

и

Символы табуляции заставляют следующий текст начинаться после следующей остановки табуляции.(Они встречаются каждые 8 ​​«символов»).Символы новой строки приводят к появлению следующего текста в новой строке.Другие управляющие символы игнорируются или отображаются в виде пробела, прямоугольника или чего-то еще, в зависимости от операционной системы и шрифта.

Это означает, что это очень простая оболочка, которая выводит весь текст линейным способом.Вам нужно запустить Python в другой оболочке, чтобы выполнить то, что вы хотите.

1 голос
/ 01 июля 2019

Текстовый графический интерфейс пользователя (GUI) должен означать «основанный на текстовом виджете каркаса GUI», такой как кроссплатформенный модуль tkinter, который поставляется с Python и который используется IDLE. Оболочка IDLE в настоящее время не предназначена для облегчения того, что вы хотите сделать. Вместо этого вы можете написать свою собственную программу tkinter, используя виджет Label или Text. Следующее может дать вам начало.

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()
0 голосов
/ 29 июня 2019

Вы можете сделать это с помощью curses. Он встроен в Python для Linux, etl. al, но для Windows вам нужно установить библиотеку windows-curses .

Как только вы это сделаете, вы можете использовать метод .clear():

from curses import initscr

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

Конечно, это зависит от решения вашей проблемы с установкой внешних модулей. Боюсь, что без этого или с помощью чего-то другого, кроме Windows, вы застряли.

Кроме того, я не уверен, работает ли это при запуске под IDLE, но если нет, просто запустите вашу программу из командной строки.

Редактировать : Первоначально я упомянул библиотеку UniCurses, но она не очень хорошо поддерживается, поэтому я изменил ее на windows-curses, который, похоже, является патчем встроенной в curses сделан для работы на Windows.

...