How to use the Tkinter PanedWindow in Python - CodersLegacy (original) (raw)

In this Tkinter Tutorial, we will discuss the PanedWindow Class. The PanedWindow Class (or Widget) is used very similar to Frames, as a container widget which can store other widgets (and even nested PanedWindows).


To create a PanedWindow in Tkinter, we must use the PanedWindow Class. There are many different parameters that this Class can take. Let us discuss a few of the important ones that you will want to use often.

  1. parent: The compulsory first parameter required in every tkinter widget. Specifies the container in which the widget will be stored.
  2. sashrelief: This can be used to change the look of the “sash” which divides a window into multiple panes. If you are on Windows, then make sure to keep this value to tk.RAISED, else the draggable sash will not be visible.``
  3. showhandle: Displays a small “handle” in the form of a square on the sash.
  4. width: Size in pixels (horizontally)
  5. height: Size in pixels (vertically)

This is what a standard definition for a PanedWindow might look like.

mainpanel = tk.PanedWindow(master, 
                           sashrelief=tk.RAISED,
                           showhandle=True,
                           width=300, 
                           height=300)

There is one more important thing to remember about PanedWindows. Unlike Frames, where we just have to specify the Frame as the “parent” (to place widgets inside it), with PanedWindows we need to perform one additional operation with the add() method.

For example, we have a PanedWindow object called mainpanel and we have a label object called label_1. After creating this label, we need to add it to the mainpanel in the following manner.

mainpanel.add(label_1)

With this knowledge in mind, let us take a look at a proper example with some output.

import tkinter as tk

class Window(): def init(self, master): mainpanel = tk.PanedWindow(master, sashrelief=tk.RAISED, showhandle=True, width=300, height=300) mainpanel.pack(fill=tk.BOTH, expand=True)

    label_1 = tk.Label(mainpanel, text="Main Panel")
    label_2 = tk.Label(mainpanel, text="Other Text")
    mainpanel.add(label_1)
    mainpanel.add(label_2)

root = tk.Tk() window = Window(root) root.mainloop()

As you can see above, the screen has been split into two. We added two widgets into our Panel, which have been equally divided (one on each side of the divider).

PanedWindows can be a little tricky with their layout and behavior. Lets take a look at some more examples.


PanedWindow Stretch and Orientation

Here is the same code from before, with some minor changes to the parameters. In our PanedWindows class, we changed the orientation of the PanedWindow to Vertical.

Secondly, we added the stretch option into our add() functions. This is rather similar to expand and fill used in pack(). The stretch parameter can take the following possible values:

By specifying “always” as parameters to both our widgets, we can have them expand to occupy space equally.

import tkinter as tk

class Window(): def init(self, master): mainpanel = tk.PanedWindow(master, orient=tk.VERTICAL, sashrelief=tk.RAISED, showhandle=True, width=300, height=300) mainpanel.pack(fill=tk.BOTH, expand=True)

    label_1 = tk.Label(mainpanel, text="Main Panel")
    label_2 = tk.Label(mainpanel, text="Other Text")
    mainpanel.add(label_1, stretch="always")
    mainpanel.add(label_2, stretch="always")

root = tk.Tk() window = Window(root) root.mainloop()


Here is a slightly more complex example with nested PanedWindows. We create a “subpanel”, add a widget or two into it, then add into the mainpanel just like we would to any other widget.

import tkinter as tk import tkinter.ttk as ttk

class Window(): def init(self, master): ttk.Style().theme_use("classic") mainpanel = tk.PanedWindow(master, sashrelief=tk.RAISED, showhandle=True, width=300, height=300) mainpanel.pack(fill=tk.BOTH, expand=True)

    label_0 = tk.Label(mainpanel, text = "Main Panel")
    mainpanel.add(label_0)

    subpanel_1 = tk.PanedWindow(mainpanel, 
                                sashrelief=tk.RAISED,
                                orient=tk.VERTICAL)
    mainpanel.add(subpanel_1)

    label_1 = tk.Label(subpanel_1, text = "Sub Panel 1")
    label_2 = tk.Label(subpanel_1, text = "Sub Panel 2")
    subpanel_1.add(label_1)
    subpanel_1.add(label_2)

root = tk.Tk() window = Window(root) root.mainloop()

Tkinter PanedWindow


This marks the end of the Tkinter PanedWindow Tutorial. Any suggestions or contributions for CodersLegacy are more than welcome. Questions regarding the tutorial content can be asked in the comments section below.