Thread: Tkinter problem

    #1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jan 2013
    Posts
    2
    Rep Power
    0

    Tkinter problem


    Hi,

    I'm relatively new to Python and am building a GUI using Tkinter. As part of the GUI I have a form ("frm2") which has a number of enrty labels ("self.ent"). These are placed in the form using a double loop (see below). I also have a button which I want to return all the entries. The button is linked (i.e. using command=self.GetValues) to a function which uses self.entVar.get() to try and get all the entries but this only gives me the last entry. Any suggestions how I can get all the entries when the button is pressed?

    frm2 = LabelFrame(cnv, text="Portfolio Weights:", font=("Calibri", 12), width=150)

    #Frame contents
    for i in range(0, len(Assets_Text)):
    labi = Label(frm2, width=30, text=Assets_Text[i], anchor='w')
    labi.grid(row=i+5, column=0, sticky='we')

    for j in range(0, self.entry2Variable.get()):
    lab2 = Label(frm2, text="Portfolio %d" % (j+1), width=10,
    font=("Calibri", 10))
    lab2.grid(row=4, column=j+1)

    self.entVar = IntVar()
    self.ent = Entry(frm2, width=10, textvariable=self.entVar)
    self.ent.grid(row=i+5, column=j+1)
    self.entVar.set(0.00)
  2. #2
  3. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    May 2009
    Posts
    451
    Rep Power
    32
    Each successive Entry box or Var over writes the previous. You have to save each one in a list or some other container. You code somewhat simplified since you omitted several parts, but working.
    Code:
    from Tkinter import *
    
    root = Tk()
    
    def get_values():
        for ent_var in entry_vars:
            print ent_var.get()
    
    frm2 = LabelFrame(text="Portfolio Weights:", font=("Calibri", 12), width=150).grid()
    
    #Frame contents
    labi = Label(frm2, width=30, text="Label Test", anchor='w')
    labi.grid(row=1, column=0, sticky='we')
    
    Button(frm2, text="get values", command=get_values).grid(row=10, column=1)
    
    entry_vars = []
    for ctr in range(0, 5):
        lab2 = Label(frm2, text="Portfolio %d" % (ctr+1), width=10,
                                 font=("Calibri", 10))
        lab2.grid(row=ctr+2, column=0)
                    
        entVar = IntVar()
        ent = Entry(frm2, width=10, textvariable=entVar)
        ent.grid(row=ctr+2, column=1)
        entVar.set(0)
        entry_vars.append(entVar)
    root,mainloop()
  4. #3
  5. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jan 2013
    Posts
    2
    Rep Power
    0
    Thanks for your help dwblas.
    Much appreciated.

IMN logo majestic logo threadwatch logo seochat tools logo