dmyers99
dmyers99

Reputation: 13

Python Tkinter - When I try to use an Entry form on a new window they do not work

I have 2 different pieces of code which are the same apart from one is not the first window. For some reason this is somehow stopping the entry fields to work.

Here's my Code:

Working:

from tkinter import *
from tkinter import ttk

def function():
    var.set(text.get()+text2.get())
    print(var.get())

main=Tk()

text=DoubleVar()
text2=DoubleVar()
var=StringVar()

ttk.Entry(main, textvariable=text).grid(column=0, row=0)
ttk.Entry(main, textvariable=text2).grid(column=1, row=0)
ttk.Label(main, textvariable=var).grid(column=2, row=0)
ttk.Button(main, text="Button", command=function).grid(column=0, row=1, columnspan=2)

Not Working:

from tkinter import *
from tkinter import ttk

def newwindow():

    def function():
        var.set(text.get()+text2.get())
        print(var.get())

    main=Tk()

    text=DoubleVar()
    text2=DoubleVar()
    var=StringVar()

    ttk.Entry(main, textvariable=text).grid(column=0, row=0)
    ttk.Entry(main, textvariable=text2).grid(column=1, row=0)
    ttk.Label(main, textvariable=var).grid(column=2, row=0)
    ttk.Button(main, text="Button", command=function).grid(column=0, row=1, columnspan=2)

root=Tk()
ttk.Button(text="Button", command=newwindow).grid(column=0, row=0)

Upvotes: 1

Views: 930

Answers (1)

Kevin
Kevin

Reputation: 76194

If you want to make additional top level windows beyond the first root window, you should make them Toplevel objects instead of Tk.

from tkinter import *
from tkinter import ttk

def newwindow():

    def function():
        var.set(text.get()+text2.get())
        print(var.get())

    main=Toplevel(root)

    text=DoubleVar()
    text2=DoubleVar()
    var=StringVar()

    ttk.Entry(main, textvariable=text).grid(column=0, row=0)
    ttk.Entry(main, textvariable=text2).grid(column=1, row=0)
    ttk.Label(main, textvariable=var).grid(column=2, row=0)
    ttk.Button(main, text="Button", command=function).grid(column=0, row=1, columnspan=2)

root=Tk()
ttk.Button(text="Button", command=newwindow).grid(column=0, row=0)
root.mainloop()

Result:

enter image description here

Upvotes: 3

Related Questions