При использовании 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» - нет.