2016-08-23 6 views
-1

私のプログラムを実行するたびに、tkの2番目(不要な)インスタンスが開き、開いたときに.quit().destroy()または.withdraw()を使用して閉じることができません。私はおそらく、何か基本的なことを忘れてしまったり、コードを間違った場所に置いたりしています。どんな助けもありがとうございます。余計なtkインスタンスが不必要に開く

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

subpage = Frame() 

button0 = Button(subpage, text="Set Generation Zero Values") 
button0.grid(row = 0, column = 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= lambda: close_main_page()) 
    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(): #entry recieve point 
    save_page = Frame(root) 

    e0 = entry0.get() 
    entry_values.append(e0) 
    e1 = entry0.get() 
    entry_values.append(e1) 
    e2 = entry0.get() 
    entry_values.append(e2) 
    e3 = entry0.get() 
    entry_values.append(e3) 
    e4 = entry0.get() 
    entry_values.append(e4) 
    e5 = entry0.get() 
    entry_values.append(e5) 
    e6 = entry0.get() 
    entry_values.append(e6) 
    e7 = entry0.get() 
    entry_values.append(e7) 
    print entry_values 

    return save_page 

def switch_page(page_name): 
    slaves = root.pack_slaves() 
    if slaves: 
    # this assumes there is only one slave in the master 
     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() 
+2

インデントが壊れています。それを修正してください。どのコードが関数に属し、どのコードが関数に属しているのかを知ることは不可能です。 –

+0

申し訳ありませんが、私は@BryanOakleyもやったことを誓っています。問題は、コードの始めにグローバルまたは変数に関連していると思います。 – 2C00L4U

答えて

0

問題は、Tkのインスタンスを作成する前に、他のウィジェットを作成しているということです。そうすると、暗黙的にルートウィンドウが作成されます。後で、Tkのインスタンスを作成して、2番目のルートウィンドウを作成します。

関連する問題