我正在使用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>]
我的其他输入框都没有给我这个问题,所以我不确定这是否是使用列表的结果。如果是这样,你能指点我另一个方向吗?
答案 0 :(得分:0)
您正在xcoord
和ycoord
中存储对条目小部件的引用,而不是条目小部件的值。您可以删除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