tkinter中的用户输入存储为“Entry”而不是“int”?

时间:2015-08-17 22:35:22

标签: python python-3.x tkinter

我正在使用tkinter从用户那里获取x和y坐标列表。初始弹出窗口获取坐标数,然后创建一个弹出窗口,其中包含正确数量的输入框。

xcoord = []
ycoord = []
x = []
y = []

for i in range(numofcoordiantes):
    xcoord[i] = ttk.Entry(mainframe, textvariable=x[i])
    ycoord[i] = ttk.Entry(mainframe, textvariable=y[i])

ttk.Button(mainframe, text="OK", command=lambda: function(xcoord, ycoord))

然而,当我尝试进行计算时,我得到错误:

TypeError:不支持的操作数类型 - :'Entry'和'int'

如果我打印出coordiantes,他们看起来像这样:

[<tkinter.ttk.Entry object at 0x03EDF9B0>, <tkinter.ttk.Entry object at 0x03EDFA30>, <tkinter.ttk.Entry object at 0x03EDFAB0>]
[<tkinter.ttk.Entry object at 0x03EDF9D0>, <tkinter.ttk.Entry object at 0x03EDFA50>, <tkinter.ttk.Entry object at 0x03EDFAD0>]

我的其他输入框都没有给我这个问题,所以我不确定这是否是使用列表的结果。如果是这样,你能指点我另一个方向吗?

1 个答案:

答案 0 :(得分:0)

您正在xcoordycoord中存储对条目小部件的引用,而不是条目小部件的值。您可以删除textvariable的使用并从条目小部件中获取值,如下所示:

x_coordinates = [int(widget.get()) for widget in xcoord]
y_coordinates = [int(widget.get()) for widget in ycoord]

但是,如果任何小部件为空或者其中包含非整数,您将收到错误。你必须添加一些错误处理代码来处理它。

如果您不熟悉列表推导,上面的第一行代码只是简写:

x_coordinates = []
for widget in xcoord:            # for each widget in the list...
    s = widget.get()             # get string value
    value = int(s)               # convert to integer
    x_coordinates.append(value)  # append to the list of coordinates