-3
from Tkinter import *
import random
entry_values = []
population_values = []

subpage = 0

entry0 = Entry(subpage)
entry1 = Entry(subpage)
entry2 = Entry(subpage)
entry3 = Entry(subpage)
entry4 = Entry(subpage)
entry5 = Entry(subpage)
entry6 = Entry(subpage)
entry7 = Entry(subpage)


def main_menu(root):
    menu = Frame(root)
    button0 = Button(menu, text="Set Generation Zero Values",
                 command=lambda: switch_page("sub"))
    button0.grid(row=0, column=0, sticky=W)

    button1 = Button(menu, text="Display Generation Zero Values",
                 command = lambda: switch_page("sub2"))
    button1.grid(row=1, column=0, sticky=W)

    button2 = Button(menu, text="Run Model",
                 command = lambda: switch_page("sub3"))
    button2.grid(row=2, column=0, sticky=W)

    button3 = Button(menu, text="Export Data")
    button3.grid(row=3, column=0, sticky=W)

    button4 = Button(menu, text="Exit Program", command=menu.destroy)
    button4.grid(row=4, column=0, sticky=W)

    return menu

def sub_menu(root):
    global subpage
    subpage = Frame(root)
    button5 = Button(subpage, text="Save Generation Data",
                 command = lambda: save_entries())
    button5.grid(row=1, column= 6, sticky=E)

    button6 = Button(subpage, text="Return To Main Page",
                 command = lambda: switch_page("main"))
    button6.grid(row=0, column= 6, sticky=W)

    juveniles_label0 = Label(subpage,text="Juveniles")
    adults_label1 = Label(subpage,text="Adults")
    seniles_label2 = Label(subpage,text="Seniles")
    population_label3 = Label(subpage,text="Population (Thousands)")
    survival_rate_label4 = Label(subpage,text="Survival Rate (Between 0 and 1)")
    birth_rate_label5 = Label(subpage,text="Birth Rate")
    number_of_gens_label6 = Label(subpage,text="Number of Generations")

    global entry0
    entry0 = Entry(subpage)
    global entry1
    entry1 = Entry(subpage)
    global entry2
    entry2 = Entry(subpage)
    global entry3
    entry3 = Entry(subpage)
    global entry4
    entry4 = Entry(subpage)
    global entry5
    entry5 = Entry(subpage)
    global entry6
    entry6 = Entry(subpage)
    global entry7
    entry7 = Entry(subpage)


    juveniles_label0.grid(row=0, column=1) 
    adults_label1.grid(row=0, column=2)
    seniles_label2.grid(row=0, column=3)
    population_label3.grid(row=1, column=0)
    survival_rate_label4.grid(row=2, column=0)
    birth_rate_label5.grid(row=3, column=0)
    number_of_gens_label6.grid(row=3, column=2)

    entry0.grid(row=1, column=1)
    entry1.grid(row=1, column=2)
    entry2.grid(row=1, column=3)
    entry3.grid(row=2, column=1)
    entry4.grid(row=2, column=2)
    entry5.grid(row=2, column=3)
    entry6.grid(row=3, column=2)
    entry7.grid(row=3, column=3)



    return subpage
def display_values(root):
    sub2 = Frame(root)
    label0 = Label(sub2, text = "")
    label1 = Label(sub2, text="")

    button7 = Button(sub2, text="Return To Main Page",
                 command = lambda: switch_page("main"))

    label0.grid(row=1, column=1)
    label1.grid(row=2, column=2)

    button7.grid(row=1, column=10)

    return sub2 

def run_model(root):
    sub3 = Frame(root)
"""
newjuveniles = entry_values[1] * entry_values[6] #new juveniles = adults * birthrate
newseniles = (entry_values[2]*entry_values[5]) + (entry_values[1] * entry_values[4]) #new seniles = adults + survivingseniles
newadults= entry_values[0] * entry_values[3]#juveniles to adults juveniles * juvenile survibal rate
"""
    button8 = Button(sub3, text="Return To Main Page",
                command = lambda: switch_page("main"))

    button8.grid(row=1, column=10)
    return sub3

def save_entries():
    save_page = Frame(root)
    ln0 = entry0.get
    entry_values.append(ln0)
    print entry_values

    return save_page


def switch_page(page_name):
    slaves = root.pack_slaves()
    if slaves:

        slaves[0].pack_forget()
    pages[page_name].pack(fill="both", expand=True)

root = Tk()
pages = {
    "main": main_menu(root),
    "sub": sub_menu(root),
    "sub2":display_values(root),
    "sub3":run_model(root),

}

switch_page("main")
root.mainloop()

My problem at the moment is that I am trying to make the save entries work and can't because the entries are defined in another function. If I try to take them out of the function it will then say subpage is not defined and subpage cannot be moved out of the function(to my knowledge) and still do it's job so I researched declaring global variables but everything I found was an example like this

myGlobal = 5
def func1():
    myGlobal = 42

def func2():
    print myGlobal

func1()
func2()

where the variable is outside of the function and then they use it in the function with a global scope.

The issue is resolved except for a second instance of tk opening

2C00L4U
  • 9
  • 1
  • 7
  • What about declaring before the definitions of both functions? – Parviz Karimli Aug 18 '16 at 11:53
  • 1
    If I'm not missing something, there is no `Entry` in this code and you are saying your problem is about entries so please create [MCVE]. – Lafexlos Aug 18 '16 at 12:01
  • Also, when trying to get value from entry, you should _call_ the method _get()_. `ln0 = entry0.get()` and in `seniles_label2 ` line there is weird `save_page = Frame(root)`. – Lafexlos Aug 18 '16 at 12:04
  • Have you tried using the `global` statement? – Bryan Oakley Aug 18 '16 at 12:29
  • sorry the code is weird I used ctrl k and pasted the code in I saw a lot of problems and removed it or put it back in place – 2C00L4U Aug 19 '16 at 11:13
  • yes bryan Oakley but it didn't work – 2C00L4U Aug 19 '16 at 11:13
  • entry0 = Entry(subpage) entry1 = Entry(subpage) entry2 = Entry(subpage) entry3 = Entry(subpage) entry4 = Entry(subpage) entry5 = Entry(subpage) – 2C00L4U Aug 19 '16 at 11:16
  • that is my creating of the entries it is in the sub_menu function and there is also the same but with. grids later on but I don't think that's any problem – 2C00L4U Aug 19 '16 at 11:17

1 Answers1

0
    myvariable = 5
def func():
    global myvariable
    myvariable = 6   #changes `myvariable` at the global scope
    print myvariable #prints 6

func()
print myvariable  #prints 6 now because we were able 
                  #to modify the reference in the function

check this

Community
  • 1
  • 1
Vinod
  • 1,965
  • 1
  • 9
  • 18
  • I just had a realisation and re- tried it slightly differnty nd it works but is creating an extra instance of tk – 2C00L4U Aug 19 '16 at 11:35