Tkinter GUI toplevel

16,244

Solution 1

You have to specify on which frame (the Toplevel()) to add the new widgets:

from Tkinter import *

def topLevel():
    top=Toplevel()
    top.title("Listbox test")
    notiLabel = Label(top, text ="----test----", font=('Times', 20))
    notiLabel.grid(row=0,column=0, sticky=W)

    noti = Label(top, text ="----test----", font=('Times', 18))
    noti.grid(row=1,column=1, sticky=W)

    f = Label(top, text ="------test-----") # note the 'top' parameter
    # 'top' was your Toplevel widget
    f.grid(row=3,column=0, sticky=W)
    fa = Label(top)
    fa.grid(row=3,column=1, sticky=W)


root=Tk()
root.title("Listbox test")

s = Label(text =">>>test<<<", font=(('Times'),20))
s.grid(row=2,column=0)


N = Label(text =">>>test<<<")
N.grid(row=3,column=0)


LB = Listbox(width=50, selectmode =SINGLE)
LB.grid(row=4, column=0)


TI = Button(text="b1", width =50, command=topLevel)
TI.grid(row=5, column=0)

root.mainloop()

I also got rid of the usage of both .pack() and .grid(), and stuck to only .grid().

Solution 2

Here is how I solved it, using this reference:

top=Toplevel()
notiLabel = Label(top, text ="----test----", font=('Times', 20))

Instead of:

top=Toplevel()
notiLabel = Label(text ="----test----", font=('Times', 20))

I had to declare "top" in the widget and declare root in root widget.

Share:
16,244
PyJar
Author by

PyJar

Updated on June 04, 2022

Comments

  • PyJar
    PyJar almost 2 years
    from tkinter import*
    import tkinter as tk
    
    def topLevel():
        top=Toplevel()
        top.title("Listbox test")
        notiLabel = Label(text ="----test----", font=('Times', 20))
        notiLabel.pack()
        notiLabel.grid(row=0,column=0, sticky=W)
    
        noti = Label(text ="----test----", font=('Times', 18))
        noti.pack()
        noti.grid(row=1,column=1, sticky=W)
    
        f = Label(text ="------test-----")
        f.pack()
        f.grid(row=3,column=0, sticky=W)
        fa = Label()
        fa.pack()
        fa.grid(row=3,column=1, sticky=W)
    
    
    root=tk.Tk()
    root.title("Listbox test")
    
    s = tk.Label(text =">>>test<<<", font=(('Times'),20))
    s.pack()
    s.grid(row=2,column=0)
    
    
    N = tk.Label(text =">>>test<<<")
    N.pack()
    N.grid(row=3,column=0)
    
    
    LB = tk.Listbox(width=50, selectmode =SINGLE)
    LB.pack()
    LB.grid(row=4, column=0)
    
    
    TI = tk.Button(text="b1", width =50, command=topLevel)
    TI.pack()
    TI.grid(row=5, column=0)
    
    root.mainloop()
    

    When the program runs, after click the command button b1, the information and label in toplevel window still print on the lower level window, how to fix this?