2015-04-28 2 views
0

У меня проблема с освежающим терминалом. Я использую python с модулем curses. Существует случайный генератор имен, который показывает сгенерированное имя рядом с предварительно определенным текстом в программе запуска. Пользователь может изменить имя (добавить/удалить символы).Проблемы с обновляющим терминалом

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

Я бы хотел обновить экран сразу после создания имени.

Algo: (часть функции GetStringName)

str = true_heroname #generated name 
    self.screen.move(y, x + len(str)) 
    self.screen.refresh()     #it should refresh screen after placing generated name 
    self.screen.addstr(y, x, prompt, pattr) 
    x += len(prompt) 
    while True: 
     self.screen.move(y, x + len(str)) 
     self.screen.refresh() 
     ####AND BELOW CODE TO ADD/REMOVE LETTERS### 

Эта функция используется для генерации имени в главном меню:

self.name = Global.IO.GetStringName("What's your name? ", noblank=True, pattr=c_yellow, iattr=c_Yellow) 
    #c_yellow and c_Yellow are predefinied colors 

Я надеюсь, описание и код отрезала ясно.

Как я могу сделать autorefresh screen после ввода сгенерированного имени?

+1

Информация не достаточна (короткая, полная программа поможет). –

ответ

0

Ваше сообщение не делает вашу проблему полностью понятной для меня, но, возможно, это помогает, если я укажу общий способ рисования на экран. Я предполагаю, что ваш self.screen - это настоящие проклятия stdscr.

while True: 
    userinput = self.screen.getch() # User enters character 

    # Move to start of terminal 
    # This may not be necessary depending on your application 
    curses.move(self.screen, 0, 0) 

    # Do your drawing here, depending on what char the user entered 
    # ... 
    self.screen.addstr("Hello world!") 

    curses.clrtobot(self.screen) # Clear remainder of the screen 
    self.screen.refresh() # Refresh terminal, to show new drawings