python中的进度条诅咒

时间:2017-09-02 06:56:22

标签: python progress-bar curses

我创建了一个进度条,在从另一个函数获取百分比后自动更新,但是我遇到了像############这样的问题。相反,它只是向右移动'#'直到达到100%。以下是我的代码。之所以这样,是因为我需要百分比来外部,以便代码可以重复使用。请帮帮我。

import curses
import time

curses.initscr()

def percentage():
    loading = 0
    while loading < 100:
        loading += 1
        time.sleep(0.03)
        update_progress(loading)


def update_progress(progress):
    win = curses.newwin(3, 32, 3, 30)
    win.border(0)
    rangex = (30 / float(100)) * progress
    pos = int(rangex)
    display = '#'
    if pos != 0:
        win.addstr(1, pos, "{}".format(display))
        win.refresh()

percentage()

2 个答案:

答案 0 :(得分:2)

问题是您每次都要拨打newwin(),丢弃旧win并将其替换为同一位置的新import curses import time curses.initscr() def percentage(): win = curses.newwin(3, 32, 3, 30) win.border(0) loading = 0 while loading < 100: loading += 1 time.sleep(0.03) update_progress(win, loading) def update_progress(win, progress): rangex = (30 / float(100)) * progress pos = int(rangex) display = '#' if pos != 0: win.addstr(1, pos, "{}".format(display)) win.refresh() percentage() curses.endwin() 。新窗口只添加一个字符,背景为空白,因此您可以看到前进光标而不是条形。

一种可能的解决方案:

endwin()

(注意添加对/link的调用以将终端恢复到正常模式。)

在程序结束后将其保留在屏幕上,这类似于诅咒的范围。你不能真正依赖curses和stdio之间的任何互动,抱歉。

答案 1 :(得分:0)

您只需切换pos即可乘以display #

if pos != 0:
    win.addstr(1, 1, "{}".format(display*pos))
    win.refresh()