前期:我正在使用wxPython-4.0.4,Python 3.7.2,wx.ProgressDialog和Windows 10
我在尝试创建进度条时遇到问题。我读的文件超过100万。行并添加了一个进度条,该进度条每10k行左右更新一次。我发现标准提高是...让我们说出意外。我查看了通过GetValue()获得的值,发现它们比我通过Update()设置的值小得多。
我删除了所有不必要的代码,进行了一些实验,然后发现效果取决于进度条的最大值。对于小于65,536(恰好是2 ^ 16)的值,一切似乎都可以正常工作。在寻找解决方案的过程中,我没有发现类似的情况。您可以在下面找到我的示例代码。
这应该发生吗?有没有办法避免这种行为(除了减小最大值)?还是我错过了什么?我知道其他类型的进度条不会以这种方式起作用,但是由于其简单性,我想使用这种类型。
已经谢谢您了!
import wx
def pb_test(maxVal):
print("Progress bar test with maxVal=%d" % maxVal)
pb = wx.ProgressDialog(title="", message="")
pb.SetRange(maxVal) # set maximum of progress bar
val=20000 # arbitrary value to set progress bar to
pb.Update(val) # set value
print("Value/Range: %d/%d\tExpected Value: %d" %(pb.GetValue(), pb.GetRange(), val))
pb.Update(maxVal) # set maximum value
print("Value/Range: %d/%d\tExpected Value: %d" %(pb.GetValue(), pb.GetRange(), maxVal))
app = wx.App()
pb_test(65535) # <-- this one works as expected
print("------------------")
pb_test(65536) # <-- this one shows only half the expected values
编辑:这是我的输出:
Progress bar test with maxVal=65535
Value/Range: 20000/65535 Expected Value: 20000
Value/Range: 65535/65535 Expected Value: 65535
------------------
Progress bar test with maxVal=65536
Value/Range: 10000/65536 Expected Value: 20000
Value/Range: 32768/65536 Expected Value: 65536