1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Help with python GUI coding

  1. Feb 10, 2013 #1
    1. The problem statement, all variables and given/known data

    To modify a future value program so that a user inputs the data w/ a GUI


    2. Relevant equations

    principal = principal * (1+apr)

    3. The attempt at a solution

    Anyone familiar w/ python coding? I'm a beginner. I'm absolutely stuck on this problem, I seem to have gotten everything, except I simply can not figure out how to write the program so that it can take the values the user inputs for principal and apr in the entry boxes and uses those values to run the equations for future value over 10 years. Been stuck on this for hours. Here's my code:


    from graphics import *

    def main():

    # Get principal and interest rate in GUI
    win = GraphWin("Future value calculator", 300, 300)
    win.setCoords(0, 0, 300, 300)
    Text(Point(75, 200), " Enter principal: "). draw(win)
    Text(Point (75, 150), "Enter interest rate: ").draw(win)
    input = Entry(Point(200, 200), 10).draw(win)
    input = Entry(Point(200, 150), 10).draw(win)
    button = Text(Point(150, 20), "Calculate")
    button.draw(win)
    Rectangle(Point(100, 10), Point(200, 30)).draw(win)


    #mouse click
    win.getMouse()


    # Create a graphics window with labels on left edge
    win = GraphWin("Investment Growth Chart", 320, 240)
    win.setBackground("white")
    win.setCoords(-1.75,-200, 11.5, 10400)
    Text(Point(-1, 0), ' 0.0K').draw(win)
    Text(Point(-1, 2500), ' 2.5K').draw(win)
    Text(Point(-1, 5000), ' 5.0K').draw(win)
    Text(Point(-1, 7500), ' 7.5k').draw(win)
    Text(Point(-1, 10000), '10.0K').draw(win)


    # Draw bar for initial principal
    bar = Rectangle(Point(0, 0), Point(1, principal))
    bar.setFill("green")
    bar.setWidth(2)
    bar.draw(win)

    # Draw a bar for each subsequent year

    for year in range(1, 11):
    principal = principal * (1 + apr)
    bar = Rectangle(Point(year, 0), Point(year+1, principal))
    bar.setFill("green")
    bar.setWidth(2)
    bar.draw(win)

    input("Press <Enter> to quit.")
    win.close()

    main()



    I'm a beginner and have only been coding for 1.5 weeks, so I need simple explanations with no fancy expert coding tricks.
     
  2. jcsd
  3. Feb 10, 2013 #2

    trollcast

    User Avatar
    Gold Member

    Firstly I'm going to suggest you use a different GUI package, TkInter is the standard one used with python, that graphics module isn't that great.

    Once I managed to get the code reformatted correctly (always use [noparse]
    Code (Text):
     
    [/noparse] tags around any code so that it maintains the correct formatting, especially important for python), I found the problem was you hadn't assigned apr and princpal values before you used them.

    Code (Text):
    SNIP
        Text(Point(75, 200), " Enter principal: "). draw(win)
        Text(Point (75, 150), "Enter interest rate: ").draw(win)
        [COLOR="Red"]input1 = Entry(Point(200, 200), 10)
        input1.draw(win)
        input2 = Entry(Point(200, 150), 10)
        input2.draw(win)[/COLOR]
       
        SNIP

        Text(Point(-1, 7500), ' 7.5k').draw(win)
        Text(Point(-1, 10000), '10.0K').draw(win)

        [COLOR="Red"]principal = float(input1.getText())
        apr = float(input2.getText())[/COLOR]

        # Draw bar for initial principal
        bar = Rectangle(Point(0, 0), Point(1, principal))
        bar.setFill("green")
        bar.setWidth(2)
        bar.draw(win)

       SNIP
     
    That shows what I had to edit (red bits) and where it is in relation to the rest of the code.

    Its still given me an error when you try to close it but that should show you what you needed. Although definitely think about trying Tkinter unless this is for a course/class.

    input1 = Entry(Point(200, 200), 10) , declares an object of type "Entry" with the specified parameters.

    input1.draw(win) , draws the object onto the gui window.

    principal = float(input1.getText()) , this sets the value of principal so you don't get the error, the getText() method returns the string that is currently in the Entry object. This then needs to be converted to a numeric type so it will work properly with the rest of the code. I've used float since the value can be a decimal.

    Hope this helps abit.
     
  4. Feb 10, 2013 #3
    Yes, thanks very much. I was trying to follow the text book and totally missed the error in my code where I had .draw(win) after entry. I think that's what kept messing up. I think we'll learn tkinter later on in the class, we're just learning the very basics of making GUIs and object oriented programming for now.

    Thanks again!
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Help with python GUI coding
Loading...