Проблема с высокими значениями для wxPython.ProgressDialog - PullRequest
1 голос
/ 14 марта 2019

заранее: я использую wxPython-4.0.4, Python 3.7.2, wx.ProgressDialog и Windows 10

Я столкнулся с проблемой при попытке создать индикатор выполнения.Я читал файл с более чем 1 мил.линий и добавил индикатор выполнения, который обновляется каждые 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
...