2015-04-23 5 views
1

Я использую пакет из: http://www.lfd.uci.edu/~gohlke/pythonlibs/#curses и я делаю экранный объект следующим образом:Python Проклятие для окон не перезаписать строки

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 
import curses 
import time 

class Screen(object): 
    def __enter__(self): 
     self.stdscr = curses.initscr() 
     curses.cbreak() 
     curses.noecho() 
     self.stdscr.keypad(1) 
     curses.curs_set(0) 

     Y, X = self.stdscr.getmaxyx() 

     gap = 1 
     self.bar = self.stdscr.derwin(3, X, 1, 0) 
     self.threads = self.stdscr.derwin(Y-4-gap, X/2, 4, 0) 
     self.messages = self.stdscr.derwin(Y-4-gap, X/2 -1, 4, X/2 + 1) 

     # self.bar.box() 
     # self.threads.box() 
     # self.messages.box() 
     return self 

    def __exit__(self, type, value, traceback): 
     curses.nocbreak() 
     self.stdscr.keypad(0) 
     curses.echo() 
     curses.endwin() 

    def refresh(self): 
     self.bar.refresh() 
     self.threads.refresh() 
     self.messages.refresh() 



if __name__ == '__main__': 
    with Screen() as S: 
     S.bar.addstr(0, 0, "Hello") 
     S.refresh() 
     time.sleep(2) 
     S.bar.addstr(0, 0, "\rHi") 
     time.sleep(2) 

Но когда я на самом деле выполнить это он просто остается, как «Hello «вместо того, чтобы перезаписывать его и печатать« привет »

Я попытался удалить '\ r', но безрезультатно.

Любые идеи?

ответ

0

Если вы хотите очистить «Hello», вы можете добавить S.bar.erase() до S.bar.addstr(0, 0, "\rHi"). И вам также нужно добавить S.refresh() после S.bar.addstr(0, 0, "\rHi"), чтобы обновить окно, или «Привет» не будет отображаться.

window.erase() Используется для очистки окна. Вы можете проверить документацию для получения более подробной информации: https://docs.python.org/2/library/curses.html