【问题标题】:Getting values from multiple textboxes in tkinter从 tkinter 中的多个文本框获取值
【发布时间】:2018-08-04 12:21:31
【问题描述】:

我有以下代码。

from Tkinter import  *

root = Tk()
n_array = []        #will be used as 2d array

def add_four_entries():
    global root, n_array

    row_array=[]    #array used to store a row
    n_array.append(row_array)
    y=len(n_array)            

    for x in range(4):
        tbn="t"+str(y)+str(x)   #create entrybox names of the form t10, t11,...
        #print(tbn)
        tbn=Entry(root)
        row_array.append(tbn)
        row_array[x].grid(row=y, column=x,sticky="nsew", padx=2,pady=2)

def getval():
    for row in range(len(n_array)):

        for col in range(4):
            tbn="t"+str(row+1)+str(col)
            print(tbn.get())

Button(root, text="Add new row", command=add_four_entries).grid(row=0, column=1,)
Button(root, text="Print val", command=getval).grid(row=21, column=1,)
mainloop()

每次按下“添加新行”按钮时,都会创建一行四个文本框。 'Print Val'按钮一一打印所有文本框的值。 由于文本框是动态命名的,因此名称是字符串类型。但是单击 get Val 按钮时出现此错误。

AttributeError: 'str' object has no attribute 'get'

我做错了什么?

【问题讨论】:

    标签: python python-2.7 user-interface tkinter tk


    【解决方案1】:

    替换

    for col in range(4):
        tbn="t"+str(row+1)+str(col)
        print(tbn.get())
    

    for col in range(4):
        print(n_array[row][col].get())
    

    您不需要存储名称。如果网格是按已知顺序构建的,您可以使用 n_array 索引(实际上是列表的列表)作为坐标来访问您保存的 Entry 控件。

    当你这样做时,你实际上是在扔掉 tbn 字符串

    tbn=Entry(root)
    

    但是您存储了 Entry 对象,这就是它仍然有效的原因。

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多