为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣非少年 2021-06-04 21:37:25
当使用 IntVar 获取 Entry 小部件的内容时,如果整数左补零,结果是错误的。例如,如果输入框包含“05000”,则 IntVar 值为 2560。这个问题可以通过不使用 IntVar 并直接在 python 中重新转换整数来轻松解决int(entry.get())。我只是好奇是什么导致了这个问题;我不明白究竟发生了哪个重铸错误。下面是重现问题的玩具示例:import tkinter as tkdef 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 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

这是因为带有前导零的数字被解释为八进制。所以 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


查看完整回答
反对 回复 2021-06-06
  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信