python 如何从使用tkinter中的循环显示的条目中收集值

ldxq2e6h  于 2023-01-12  发布在  Python
关注(0)|答案(1)|浏览(152)

我想显示一个空表,以便用户可以填充它。我使用了一个循环来显示条目以形成一个表。问题是我想获取表中值的列表,但返回的列表填充了空值,因为它在显示表之前收集数据。我使用了一个类Tbl来形成包含表的框架,并使用了frame类中的一个方法createTable(page class). ps.我从另一个页面的条目中获取维度。

class Tbl(tk.Frame):
       def __init__(self,root= None):
            tk.Frame.__init__(self, root)
            self.grid()
            self.list=self.create_widgets()
            
       def create_widgets(self):
                self.et = {}
                mat=[]
                con=0
                for i in range(t+1):
                 for j in range(m+1):
                    if (i==0):
                        if (j==0):
                            self.el = tk.Label(self, text=" ")
                            self.el.grid(row=i, column=j)
                        else :
                            self.el = tk.Label(self, text="M"+str(j),width=5,borderwidth=1, relief="solid",font=('Arial',14,'bold'),justify="center")
                            self.el.grid(row=i, column=j)
                    else :
                        if (j==0):
                            self.el = tk.Label(self, text="T"+str(i),width=5,borderwidth=1, relief="solid",font=('Arial',14,'bold'),justify="center")
                            self.el.grid(row=i, column=j)
                        else : 
                            self.et[con] = tk.Entry(self, width=5,borderwidth=1, relief="solid" ,fg='black',font=('Arial',16,'bold'),justify="center")
                            self.et[con].grid(row=i, column=j)
                            mat.append(self.et[con].get())
                            con +=1
                return mat
def createTable(self):
        global t
        global m
        
        t=int(self.controller.tNb)
        m=int(self.controller.mNb)
        global tabl
        tabl=Tbl(self)
        tabl.place(relx=0.3,y=150)

我尝试使用文本变量,但它不工作.

bxjv4tth

bxjv4tth1#

您可以迭代字典中的条目,通过调用get获取每个条目的值。例如:

class Tbl(tk.Frame):
    ...
    def get(self):
        for key, item in self.et.items():
            print(f"{key} = {item.get()}")

当将项存储到self.et时,使用(m,t)形式的元组可能更直观,假设您在使用数据时需要这些值。

def create_widgets(self):
    ...
    self.et[(i,j)] = tk.Entry(...)
    ...

当您这样做时,在t设置为2且m设置为3的情况下调用table.get()时,上面定义的get方法的输出将如下所示:
一个二个一个一个

相关问题