PyQt5のProgressBarを使いやすくする

2022/03/30に公開

tqdmっぽく使いたい

pyqtSignalを使う方法もあるが,ほとんどの場合でforループ等で使われると思うため
tqdmみたいにlistを渡すと簡単にプログレスバーを更新したい

イテレータで実装できそう...

スクリプト

progress_bar_util.py

class ProgressBarUtil(object):
    def __init__(self, list, progress_bar) -> None:
        self.progress_bar = progress_bar

        self.iter = iter(list)
        self.max = len(list)
        self.val = 0

        self.progress_bar.setValue(0)

    def __iter__(self):
        return self
    
    def __next__(self):
        self.val += 1
        self.progress_bar.setValue(self.val/self.max * 100)

        if self.val > self.max:
            raise StopIteration()

        
        return self.iter.__next__()

使い方

import time
from progress_bar_util import ProgressBarUtil

for i in ProgressBarUtil(range(7), ui.progress_bar):
    print(i)
    time.sleep(1)

example


https://github.com/yn4k4nishi/pyqt-progressbar-util

Discussion