代码之家  ›  专栏  ›  技术社区  ›  Ubi

从tkinter中的多个文本框中获取值

  •  0
  • Ubi  · 技术社区  · 6 年前

    我有以下代码。

    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”逐个打印所有文本框的值。 由于文本框是动态命名的,因此名称是字符串类型。但是ob单击get Val按钮时,我得到了这个错误。

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

    我做错了什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   progmatico    6 年前

    代替

    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\u数组索引(实际上是一个列表列表)作为坐标来获取 Entry 保存的控件。

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

    tbn=Entry(root)
    

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