Home > Mobile >  Make multiple tk.Toplevel windows embedded/unified in main tk window
Make multiple tk.Toplevel windows embedded/unified in main tk window

Time:09-03

So I'm trying to create a program which uses multiple tk.Toplevel windows. The problem with this is, that all windows show up seperated as their "own App", so when you alt tab, you switch between the toplevel windows. The pseudocode would look something like this: import tkinter as tk

top_levels = {}

def open_toplevel():
    top_level = tk.Toplevel(root)
    top_level.geometry("300x200 0 0")
    top_levels.update({f"toplevel{len(top_levels.keys())}" : top_level})

root = tk.Tk()

button = tk.Button(root, command= open_toplevel)
button.place(x=0, y=0)

root.mainloop()

So my question, is: is there a way to unify them into "one window"?

CodePudding user response:

If you want all of them to unify into one window then tk.Frame is a better widget to use instead of tk.Toplevel

The purpose of tk.Toplevel is to create a new temporary window, not an extra part of the window. But frames are a really good way to organise stuff.

This code below creates new frame every time you click the button. This is just a simple example. You can also use grid for widgets in a frame. I also put a border so you can see where the frames are located.

from tkinter import *

def open_frame():
    frame = Frame(root, highlightbackground="black", highlightthickness=2)
    lbl1 = Label(frame, text=f"Frame {len(frames)   1} label 1")
    lbl2 = Label(frame, text=f"Frame {len(frames)   1} label 2")
    lbl1.pack()
    lbl2.pack()
    frame.pack(padx=5, pady=5)
    frames.append(frame)


root = Tk()

frames = []

btn = Button(root, text="Open Frame", command=open_frame)
btn.pack()

root.mainloop()

I hope this solution is helpful

CodePudding user response:

You also could have a look at this method of combining 2 Tkinter windows

Hopefully, it would help you!

  • Related