[Tutor] Getting info from Toplevel() window?

Ryan Booz ryanbooz@alumni.psu.edu
Tue, 22 May 2001 08:58:15 -0400


I'm wondering if someone can help me with this question.  I have a
simple program that puts a Proverb in a small Tk window when students
log into the computers here at school.  I've been trying to add the
ability to let them add Proverbs of their own.  They hit a button that
brings up a second Toplevel() window which has three entry fields.  From
that window, they hit an "add" button that should write the proverb.
However, it does not grab the info out of the fields.  The separators I
used for the split function (to separate the chapter, verse, and
Proverb) gets written, so the function does work (mostly), but I can't
figure out how to get the info from the window!  Thanks a bunch.  Slowly
moving up the learning curve!

Ryan Booz
Tech Coordinator
Belleville Mennonite School

---------- Proverb.py ---------------
from random import randint
from string import *
import string
from Tkinter import *

def split(proverb):
        if proverb[-1]=="\012":
                proverb=proverb[:-1]
        else:
                proverb=proverb

        x=len(proverb)/2

        while proverb[x]!=" ":
                x=x+1
        else:
                x=x

        daily_prov=proverb[:x]+"\n"+"\t"+proverb[x+1:]
        return daily_prov

def add_prov():

        add_window=Toplevel(main)

        add_frame1=Frame(add_window,relief=SUNKEN,border=0)
        add_frame1.pack(side=TOP,fill=BOTH)

        add_frame2=Frame(add_window,relief=SUNKEN,border=0)
        add_frame2.pack(side=TOP,fill=BOTH)

        add_frame3=Frame(add_window,relief=SUNKEN,border=0)
        add_frame3.pack(side=TOP,fill=BOTH)

        add_entry=Entry(add_frame1,textvariable=typed_entry,fg="black")
        add_entry.pack(side=LEFT,fill=BOTH,expand=1)

        chapter_label=Label(add_frame2,text="Chapter")
        chapter_label.pack(side=LEFT,fill=BOTH)

        chapter_entry=Entry(add_frame2,textvariable=chap)
        chapter_entry.pack(side=LEFT,fill=BOTH)

        verse_label=Label(add_frame2,text="Verse(s)")
        verse_label.pack(side=LEFT,fill=BOTH)

        verse_entry=Entry(add_frame2,textvariable=ver)
        verse_entry.pack(side=LEFT,fill=BOTH)

        add_proverb=Button(add_frame3,text="Add a
Proverb",font=("Arial",8),command= lambda
chap=chapter_entry.get(),ver=verse_entry.get(),proverb=add_entry.get():
write_prov(chap,ver,proverb))
        add_proverb.pack(side=LEFT,fill=BOTH,expand=1)

def write_prov(chapter,verse,proverb):

        new=open("new.txt",'a+')
#        print chapter
#         print proverb
#        proverb=add_entry.get()
#     chapter=chapter_entry.get()
#        verse=verse_entry.get()
        print chapter
        new.write("\n" + chapter + "*" + verse + "*" + proverb)
        typed_entry.set("")
        chap.set("")
        ver.set("")
        new.close()

def get_prov():
        new_file=open("new.txt",'r+')
        new_list=new_file.readlines()
        total_prov=len(new_list)
        x=randint(0,total_prov-1)
        daily_prov=new_list[x]
        daily_prov=string.split(daily_prov,"*")
        chap=daily_prov[0]
        ver=daily_prov[1]
        daily_prov=split(daily_prov[2])

        new_file.close()
        return chap,ver,daily_prov

def change_prov():
        new_file=open("new.txt",'r+')
        new_list=new_file.readlines()
        total_prov=len(new_list)
        x=randint(0,total_prov-1)
        daily_prov=new_list[x]
        daily_prov=string.split(daily_prov,"*")
        chap=daily_prov[0]
        ver=daily_prov[1]
        daily_proverb=split(daily_prov[2])

        proverb.config(text=daily_proverb+"\n"+"Proverb"+"
"+chap+":"+ver)
        new_file.close()


#-----This is the start of the program ----------#

chap,ver,daily_proverb=get_prov()

main=Tk()
main.title("BMS Proverb of the Day")
#main.geometry('200x160')

outer_frame=Frame(main,relief=SUNKEN,border=0)
outer_frame.pack(fill=BOTH,expand=1)

top_frame=Frame(outer_frame,relief=SUNKEN,border=0)
top_frame.pack(side=TOP,fill=BOTH)

middle_frame=Frame(outer_frame,relief=SUNKEN,border=0)
middle_frame.pack(side=TOP,fill=BOTH)

middle_frame2=Frame(outer_frame,relief=SUNKEN,border=0)
middle_frame2.pack(side=TOP,fill=BOTH)

bottom_frame=Frame(outer_frame,relief=SUNKEN,border=0)
bottom_frame.pack(side=TOP,fill=BOTH)

proverb=Label(top_frame,text=daily_proverb+"\n"+"Proverb"+"
"+chap+":"+ver,fg="blue",bg="white",height=3,font=("Arial",10,"bold"))
proverb.pack(fill=BOTH,expand=1)

typed_entry=StringVar()
chap=StringVar()
ver=StringVar()

change_proverb=Button(bottom_frame,text="Give me a new
Proverb",fg="blue",command=change_prov)
change_proverb.pack(side=LEFT,fill=BOTH,expand=1)

add_proverb=Button(bottom_frame,text="Add Proverb",command=add_prov)
add_proverb.pack(side=LEFT)

quit=Button(bottom_frame,text="Quit",command=main.quit)
quit.pack(side=LEFT,fill=BOTH,expand=1)

mainloop()