При использовании IntVar для получения содержимого виджета Entry результат неверен, когда целое число остается нулевым. Например, если поле ввода содержит "05000", значение IntVar равно 2560.
Эту проблему можно легко решить, не используя IntVar и перебирая целое число непосредственно в python int(entry.get())
. Мне просто интересно, что вызывает эту проблему; Я не понимаю, какая именно ошибка происходит.
Ниже примера игрушки, воспроизводящего проблему:
import tkinter as tk
def print_values():
print("Value 0 - entry: '{}' - integer: {}".format(entry0.get(), int0.get()))
print("Value 1 - entry: '{}' - integer: {}".format(entry1.get(), int1.get()))
if __name__ == "__main__":
root = tk.Tk()
int0 = tk.IntVar(root, 5)
tk.Label(root, text="Value 0").grid(row=0, column=0)
entry0 = tk.Entry(root, textvariable=int0)
entry0.insert(0, "0000")
entry0.grid(row=0, column=1)
int1 = tk.IntVar(root, 5)
tk.Label(root, text="Value 1").grid(row=1, column=0)
entry1 = tk.Entry(root, textvariable=int1)
entry1.insert(0, "0")
entry1.insert("end", "000")
entry1.grid(row=1, column=1)
tk.Button(root, text="Print", command=print_values).grid(row=2, column=1)
print_values()
root.mainloop()
Значение "00005" правильное, а значение "05000" - нет.
Это потому, что числа с ведущими нулями интерпретируются как восьмеричные. Таким образом, 05000 составляет 8 ^ 3 * 5. То же самое происходит для меня в переводчике:
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 05000
2560