I love this. One tiny thought - perhaps use a conditional when setting the string percentage/completion value to prepend a 0 of it's < 10?
like: completion_string: str = '0' + str(self.completion) if self.completion < 10 else str(self.completion)
basically it would keep your bar from shifting when percentage goes from single digit to double digit.