tqdm - multiple progress bars with nested for loops in PyCharm
Answer a question
The below question is for people who use PyCharm. There are nested for loops and tqdm is used for progress bars corresponding to each for loop. The code is shown below.
from tqdm import tqdm
import time
for i in tqdm(range(5), desc="i", colour='green'):
for j in tqdm(range(10), desc="j", colour='red'):
time.sleep(0.5)
But the problem is, the progress bars for the inner loop appear in newline everytime there is an update in the bar as shown below.
i: 0%| | 0/5 [00:00<?, ?it/s]
j: 0%| | 0/10 [00:00<?, ?it/s]
j: 10%|█ | 1/10 [00:00<00:04, 1.94it/s]
j: 20%|██ | 2/10 [00:01<00:04, 1.94it/s]
j: 30%|███ | 3/10 [00:01<00:03, 1.96it/s]
j: 40%|████ | 4/10 [00:02<00:03, 1.96it/s]
j: 50%|█████ | 5/10 [00:02<00:02, 1.97it/s]
j: 60%|██████ | 6/10 [00:03<00:02, 1.97it/s]
j: 70%|███████ | 7/10 [00:03<00:01, 1.97it/s]
j: 80%|████████ | 8/10 [00:04<00:01, 1.98it/s]
j: 90%|█████████ | 9/10 [00:04<00:00, 1.98it/s]
j: 100%|██████████| 10/10 [00:05<00:00, 1.98it/s]
i: 20%|██ | 1/5 [00:05<00:20, 5.06s/it]
j: 0%| | 0/10 [00:00<?, ?it/s]
j: 10%|█ | 1/10 [00:00<00:04, 2.00it/s]
j: 20%|██ | 2/10 [00:01<00:04, 1.99it/s]
j: 30%|███ | 3/10 [00:01<00:03, 1.99it/s]
j: 40%|████ | 4/10 [00:02<00:03, 1.99it/s]
j: 50%|█████ | 5/10 [00:02<00:02, 1.99it/s]
j: 60%|██████ | 6/10 [00:03<00:02, 1.99it/s]
j: 70%|███████ | 7/10 [00:03<00:01, 1.99it/s]
j: 80%|████████ | 8/10 [00:04<00:01, 1.99it/s]
j: 90%|█████████ | 9/10 [00:04<00:00, 1.99it/s]
j: 100%|██████████| 10/10 [00:05<00:00, 1.99it/s]
i: 40%|████ | 2/5 [00:10<00:15, 5.05s/it]
Setting the parameter 'position` for each loop also doesn't fix the issue.
from tqdm import tqdm
import time
for i in tqdm(range(5), desc="i", colour='green', position=0):
for j in tqdm(range(10), desc="j", colour='red', position=1):
time.sleep(0.5)
How does one get the progress bar to update in the same line?
Answers
The solution is two fold.
-
Go to "Edit configurations". Click on the run/debug configuration that is being used. There should be an option "Emulate terminal in output console". Check that. Image added for reference.

-
Along with the
positionargument also set theleaveargument. The code should look like this. I have addedncolsso that the progress bar doesn't take up whole of the console.
from tqdm import tqdm
import time
for i in tqdm(range(5), position=0, desc="i", leave=False, colour='green', ncols=80):
for j in tqdm(range(10), position=1, desc="j", leave=False, colour='red', ncols=80):
time.sleep(0.5)
When the code is now run, the output of the console is as shown below.
i: 20%|████████▍ | 1/5 [00:05<00:20, 5.10s/it]
j: 60%|████████████████████████▌ | 6/10 [00:03<00:02, 1.95it/s]
The updates happen on the same line.
更多推荐

所有评论(0)