Я хочу создать текстовый графический интерфейс для игры с питоном. Я намерен переместить символ между несколькими строками текста. после нескольких часов поиска в Интернете, решения, которые я нашел, не работают для этого. Я хочу что-то, что сотрет весь текст на экране, чтобы я мог заново напечатать ту же строку, но с перемещением персонажа на один пробел. Для ясности, экран, который я хочу стереть, - это экран, который появляется, когда вы нажимаете «Запустить модуль» в 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.
2
Anonymous 29 Июн 2019 в 20:41

3 ответа

Лучший ответ

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

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

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

И

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

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

2
anon 29 Июн 2019 в 18:01

Текстовый графический пользовательский интерфейс (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()
1
Terry Jan Reedy 30 Июн 2019 в 21:35