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