我创建了一个进度条,在从另一个函数获取百分比后自动更新,但是我遇到了像############这样的问题。相反,它只是向右移动'#'直到达到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()
答案 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()