Ayman
Ayman

Reputation: 13

python child Tk window

I have a code where I have a drop down menu and what I need to do is that when I select an entry from the drop down list (ex: Send an email) and press on go, I need this to populate another tk window (child window).

I know I am doing something wrong but can not comprehend how to overcome this, I have been searching for a while but I am unable to find a solution or guidance on how to complete this.

Thanks in advance for your help with this!

from tkinter import *
root = Tk()
root.geometry("400x100")
#========================================
#Entry area to enter the number

labelmain = Label(root,text="Please enter number:")
labelmain.pack()
entryvar = StringVar(root)
entrymain = Entry(root, textvariable=entryvar,width=30)
entrymain.pack()
#========================================
#Create option drop down list:
lst = ["Save details to DB", "Send an email", "Copy format", "email",     "View report"]
ddl = StringVar(root)
ddl.set(lst[0])
option = OptionMenu(root, ddl, *lst)
option.pack()
#========================================
#Function to get the values from drop down list
def ok():
    print("value is: " + ddl.get())
    #root.quit()
#=========================================
#Button to process the selection:

btnmain = Button(root,text="Go", command=ok)
btnmain.pack()
#=========================================

if ddl.get() == "Send an email":
    samepmrdb = Tk()
    samepmrdb.mainloop()

root.mainloop()

Upvotes: 0

Views: 180

Answers (2)

Lafexlos
Lafexlos

Reputation: 7735

You are checking the value of ddl right after you open up your window. As you said in your question, you want some stuff happen after pressing the button so you need to put those codes under the command of said button.

Also, a tkinter app should only have one Tk() instance and one mainloop. When you want to open another window, you should use Toplevel().

def ok():
    print("value is: " + ddl.get())
    if ddl.get() == "Send an email":
        samepmrdb = Toplevel()
        #now you can populate samepmrdb as  you like

Upvotes: 1

Ethan Field
Ethan Field

Reputation: 4730

If all you're looking to do is find a way to update a second tkinter window with the selection from an OptionMenu on the first tkinter window this can be achieved easily using the below code:

from tkinter import *

class App:
    def __init__(self, master):
        self.master = master
        self.top = Toplevel(master)
        self.master.withdraw()
        self.var = StringVar()
        self.var.set("Example1")
        self.option = OptionMenu(self.top, self.var, "Example1", "Example2", "Example3", "Example4")
        self.button = Button(self.top, text="Ok", command=lambda:self.command(self.var))
        self.label = Label(self.master)
        self.option.pack()
        self.button.pack()
        self.label.pack()
    def command(self, var):
        self.master.deiconify()
        self.label.configure(text=var.get())
        self.label.pack()

root = Tk()
app = App(root)
root.mainloop()

This creates a Toplevel widget which contains an OptionMenu and Button widget. The Button widget will then output the selection from the OptionMenu widget when pressed.

This kind of logic can be used for all sorts of things and it's relatively simple to pass information from one window to another, provided this is what your question is asking.

Upvotes: 0

Related Questions