首页 文章

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

提问于
浏览
0

我正在使用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

    您正在 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
    

相关问题