В tkinter, почему комбинация IntVar / Entry возвращает неверное целое число при использовании заполнения нулями? - PullRequest
0 голосов
/ 29 августа 2018

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

1 Ответ

0 голосов
/ 29 августа 2018

Это потому, что числа с ведущими нулями интерпретируются как восьмеричные. Итак, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...