2

This should be a very very simple problem. I'm making a GUI in which I have multiple entry widgets... about 30 or so all in one column. Instead of making each box one by one it seems like a better idea to just generate the widgets with a loop. However, I'm finding it extremely difficult to .get() values from the entry widgets, and convert them into floats. This is what I have so far... any help would be greatly appreciated.

class Application(Frame):

def __init__(root,master):
    Frame.__init__(root,master)
    root.grid()
    root.create_widgets()



def calcCR(root):        
    d1 = root.enter.get()
    d1 = float(d1)
    #root.answer.delete(0.0,END)
    a = 'The C/R Alpha is! %lf \n' % (d1)
    root.answer.insert(0.0, a)


def create_widgets(root):
    ### Generate Element List ###
    for i in range(len(elem)):
        Label(root, text=elem[i]).grid(row=i+1, column=0)

    ### Generate entry boxes for element wt% ### 
    for i in range(len(elem)):            
        enter = Entry(root, width = 8)
        enter.grid(row = i+1,column=1)
        enter.insert(0,'0.00')

    root.button = Button(root, text = 'Calculate C/R', command = root.calcCR)
    root.button.grid(row=11, column=2, sticky = W, padx = 10)

    root.answer = Text(root, width = 50, height = 12.5, wrap = WORD)
    root.answer.grid(row=1, column=2, rowspan = 10, sticky = W, padx = 10)    


root = Tk()
root.title('C/R Calculator')
app = Application(root)
root.mainloop()

1 Answer 1

3

Put the Entry instances into a list.

from tkinter import Tk, Frame, Label, Entry, Button

class App(Frame):
    def __init__(root, master):
        Frame.__init__(root, master)
        root.grid()
        root.create_widgets()

    def get_values(root):
        return [float(entry.get()) for entry in root.entries]

    def calc_CR(root):
        answer = sum(root.get_values()) #Replace with your own calculations
        root.answer.config(text=str(answer))

    def create_widgets(root):
        root.entries = []
        for i in range(20):
            label = Label(root, text=str(i))
            label.grid(row=i, column=0)

            entry = Entry(root, width=8)
            entry.grid(row=i, column=1)
            entry.insert(0, '0.00')
            root.entries.append(entry)

        root.calc_button = Button(root, text='Calculate C/R', command=root.calc_CR)
        root.calc_button.grid(row=20, column=0)

        root.answer = Label(root, text='0')
        root.answer.grid(row=20, column=1)

    def run(root):
        root.mainloop()



root = Tk()
root.title('C/R Calculator')

app = App(root)
app.run()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.