wxPython.ProgressDialog的高值问题

时间:2019-03-14 16:31:05

标签: python-3.x wxpython progressdialog

前期:我正在使用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

0 个答案:

没有答案