Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在tkinter中,为什么使用零填充时IntVar/Entry组合返回错误的整数?_Python_Tkinter - Fatal编程技术网

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

Python 在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: '{}'

当使用IntVar获取条目小部件的内容时,如果整数被保留为零填充,则结果是错误的。例如,如果输入框包含“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

这是因为带前导零的数字被解释为八进制。所以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,因为它也应该用新的前缀进行更改。