【问题标题】:Python Curses for windows not overwriting strings用于不覆盖字符串的 Windows 的 Python 诅咒
【发布时间】:2015-04-23 16:30:14
【问题描述】:

我使用的包来自:http://www.lfd.uci.edu/~gohlke/pythonlibs/#curses 我正在制作这样的屏幕对象:

# -*- 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”而不是覆盖它并打印“hi”

我已尝试删除 '\r' 但无济于事。

有什么想法吗?

【问题讨论】:

    标签: python curses python-curses


    【解决方案1】:

    如果要清理“你好”,可以在S.bar.addstr(0, 0, "\rHi")前加S.bar.erase()。并且你还需要在S.bar.addstr(0, 0, "\rHi")之后添加S.refresh()来更新窗口,否则“Hi”将不会显示。

    window.erase() 用于清除窗口。您可以查看文档以获取更多详细信息:https://docs.python.org/2/library/curses.html

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 2018-03-28
      • 1970-01-01
      相关资源
      最近更新 更多