python - 在 tkinter 中,为什么 IntVar/Entry 的组合在使用零填充时返回错误的整数?

标签 python tkinter

当使用 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

关于python - 在 tkinter 中,为什么 IntVar/Entry 的组合在使用零填充时返回错误的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074140/

相关文章:

python - Pandas :与 TimeGrouper 分组

python - NaN 根据 Python 启动给出错误?

python - 拼图在房间和走廊的网格中从开始行移动到结束行的最大数量

ubuntu - Windows 10 中 Ubuntu 中的 tkinter。错误 : "no display name and no $DISPLAY environment variable"

python - 将 Tix 小部件添加到 Tkinter 容器

python - python中两个 "linked"列表的排列

python - 带有 python 的 docker 中的 headless chrome。 Chrome 启动失败 : crashed

python - 从框架外部更改 tkinter 框架的属性

python - 如何在Tkinter中使用网格

navigation - 解决方案 : Python3 Tkinter Jump from one window to another with back and next buttons