Пытаюсь написать консольную игру в PyCharm, а он отказывается перемещать каретку по тому, что уже было выведено на консоль

На это:

import os
import curses
import sys

#a - двумерный массив 4х5
def printA():
    os.system('cls' if os.name == 'nt' else 'clear')
    for i in range(5):
        print(a[i][0], a[i][1], a[i][2], a[i][3], a[i][4])

   

curses.setupterm()#возврат каретки на строку выше
os.write(sys.stdout.fileno(), curses.tigetstr('cuu1'))  # Upline(cursor up)

PyCharm выдаёт такое:

Traceback (most recent call last): File "C:\Users\79107\PycharmProjects\pythonProject\main.py", line 17, in os.write(sys.stdout.fileno(), curses.tigetstr('cuu1')) # Upline(cursor up) TypeError: a bytes-like object is required, not 'NoneType'

Хотя в repl it всё работает (там у меня проблемы с библиотекой keyboard). Пожалуйста, подскажите, как в PyCarm двигать каретку вверх по уже выведенному тексту так, чтобы этот текст можно было менять.

Пытаюсь включить эмуляцию консоли

результат


Ответы (1 шт):

Автор решения: Ирина Мухомор

Действительно, дело было в функциях из библиотеки curses. Нашла управляющие последовательности и начала перемещать каретку с их помощью - заработало

x, y = 0, 0
def on_press(key):
    global player
    global x
    global y
    try:
        if (key.char == 'A' or key.char == 'a') and x>=0:
            sys.stdout.write("\033[2D")#влево
            x-=1
        elif (key.char == 'W' or key.char == 'w') and y<4:
            sys.stdout.write("\033[A")#верх
            y+=1
        elif (key.char == 'D' or key.char == 'd') and  x<4:
            sys.stdout.write("\033[2C")#вправо
            x+=1
        elif (key.char == 'S' or key.char == 's') and y>=0:
            sys.stdout.write("\033[B")#вниз
            y-=1
        elif key.char == 'Q' or key.char == 'q':
            player = get_player(player)
            sys.stdout.write(chars[player])
            sys.stdout.write("\033[C")
            readA()
            #printA()
            #print(listener.running)
    except AttributeError:
        pass
→ Ссылка