заранее: я использую 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