Python 在tkinter中,为什么使用零填充时IntVar/Entry组合返回错误的整数?
当使用IntVar获取条目小部件的内容时,如果整数被保留为零填充,则结果是错误的。例如,如果输入框包含“05000”,则IntVar值为2560 通过不使用IntVar并直接在pythonPython 在tkinter中,为什么使用零填充时IntVar/Entry组合返回错误的整数?,python,tkinter,Python,Tkinter,当使用IntVar获取条目小部件的内容时,如果整数被保留为零填充,则结果是错误的。例如,如果输入框包含“05000”,则IntVar值为2560 通过不使用IntVar并直接在pythonint(entry.get())中重铸整数,可以很容易地解决这个问题。我只是好奇是什么导致了这个问题;我不清楚到底发生了哪种重铸错误 下面是再现问题的玩具示例: import tkinter as tk def print_values(): print("Value 0 - entry: '{}'
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
这是因为带前导零的数字被解释为八进制。所以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
谢谢,我不知道八进制的前缀。在python3中,八进制前缀是“0o”,这有点令人惊讶。我同意。但这可能是因为tkinter库几乎处于低维护模式。这可能值得一提,因为它也应该用新的前缀来更改。谢谢,我不知道八进制的前缀。在python3中,八进制前缀是“0o”,这有点令人惊讶。我同意。但这可能是因为tkinter库几乎处于低维护模式。可能值得提出一个bug,因为它也应该用新的前缀进行更改。