我正在尝试使用mpb创建两行进度条。
假设我有一个包含文件绝对路径的切片。
list := []string{"C:\Temp\01.png", "C:\Temp\02.png", "C:\Temp\03.png", "C:\Temp\test.png", "C:\Temp\test01.png"}
我想把它显示成这样:
Processing 01.png ...
0 / 5 [ ] 0%
Processing 02.png ...
1 / 5 [== ] 20%
Processing 03.png ...
2 / 5 [==== ] 40%
等等。
将“正在处理...”部分和进度条分开的原因如下:
1.我想显示有关当前处理状态的其他信息。
Processing 01.png ... [Mode: WebP]
0 / 5 [ ] 0%
1.有时候,我必须处理同一个文件两次。
Processing 01.mp4 ... [Mode: WebM] [Pass: 1/2]
0 / 5 [ ] 0%
Processing 01.mp4 ... [Mode: WebM] [Pass: 2/2]
0 / 5 [ ] 0%
请注意,进度条没有改变。
1.我也想一次做多个进度条。
Processing 01.mp4 ... [Mode: WebM] [Pass: 1/2]
4 / 5 [================ ] 0%
Processing 01.png ... [Mode: WebP]
2 / 5 [======== ] 0%
Processing DONE [Mode: MP3]
5 / 5 [====================] 100%
每个进度条都应该在发生更改时尽快更新,而不是“每0.5秒更新一次进度条”。
我找不到一个方法来做这件事。mpb的每个示例代码都是单行的。
1条答案
按热度按时间fxnxkyjh1#
我第一次看到这个库,但在探索了一些代码后,我发现如何添加新的和自定义的酒吧,因为我们想要的。我已经做了一些修改的例子,你提供的链接,在您的评论,以示范添加和自定义酒吧。
假设您已经知道如何创建自定义装饰器。
要创建一个新的条形图,可以使用
p.New()
方法:New()
方法,但有更多的方法来制作一个新的酒吧。区别主要是酒吧的外观。您可以通过在文档 * 中的Progress
结构体的方法列表中查找返回Bar
示例的方法来找到它们。p.New()
的第一个参数是指定条形图的值。在我的示例中,两个条形图的值分别为100和200。只需将装饰器设置为
mpb.PrependDecorators
或mpb.AppendDecorators
即可。在我的例子中,两个bar的外部装饰器分别是:
decor.Any(file)
、decor.Any(part)
和decor.Any(pass)
。decor.Any(file2)
、decor.Any(part2)
和decor.Any(pass2)
。两者的内部装饰器是相同的:
decor.Name("Percentage: ")
、decor.NewPercentage("%d")
。这将分别显示文件名、百分比、部分和通过:
让我们来谈谈负责增加两个酒吧的所有装饰状态的循环。
我将两个条形图的值设定为相同的步长,即20,以将
Part
装饰增加1,这将导致100增加5,200增加10。当涉及到Pass
装饰时,我瞄准了步骤50,这将导致100增加2,200增加4。当循环变量遇到Part
修饰的步骤或Pass
的步骤中的任何一个时,相关的修饰增加1。实际上,这些装饰与Percentage
装饰无关。装饰的特别之处直接影响到酒吧的价值。在这个例子中,它只会通过这些方法调用增加1:bar.Increment()
、bar2.Increment()
。因为第一个条的值是100,所以循环将在每1次迭代中增加其百分比,但第二个条的值是200,每2次迭代增加其百分比。
Part
和Pass
花色没有任何百分比和条形值。它们将根据循环变量和步长值从外部增加其状态。这就是为什么我使用内部和外部的概念。但它仍然可以使您的实际程序与外部装饰一起工作,我将在其他示例中展示。整个代码的输出是:
附加示例
这只是为了如何改变酒吧的进展不同的东西。同时展示这些外部装饰是如何有用的。为了使事情更短,我将简要地解释这是做什么。此示例使哑文件大小为10MB。使一个酒吧的价值是文件的大小。从文件中读取4个字节,然后将该值发送到bar的增量值,以演示如何通过阅读文件进行。外部decor用于记录成功通过的零件数量和MB数量。
输出:
file.extension Percentage: 55% Part 2/5 Pass 1/2 Size 5/10MB [==========================================>-----------------------------------]