Попробуйте использовать целочисленное деление вместо float-деления.
>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200299.999999999
>>> 15511210043330985984000000 // (479001600 * 6227020800)
5200300
Пожалуйста, прочитайте о минимальных примерах . Не читая ваш код, я считаю, что вы столкнулись с хорошо известной проблемой, рассмотренной в предыдущих вопросах и ответах, для которых требуется две строки. Имена в телах функций оцениваются при выполнении функции.
funcs = [lambda: i for i in range(3)]
for f in funcs: print(f())
печатает «2» 3 раза, потому что 3 функции идентичны, а «i» в каждом не оценивается до вызова, когда i == 2. Однако
funcs = [lambda i=i:i for i in range(3)]
for f in funcs: print(f())
создает три разные функции, каждая из которых имеет другое фиксированное значение, поэтому печатаются 0, 1 и 2. В вашем заявлении
__cMenu.add_command(label="{}".format(option),
command=lambda: self.filter_records(column, option))
добавьте option=option
до :
, чтобы записать различные значения option
. Вы можете переписать в качестве
lambda opt=option: self.filter_records(column, opt)
, чтобы дифференцировать переменную цикла из параметра функции. Если column
изменился в цикле, ему понадобится такая же обработка.