How to create extensible PanedWindow with gridlayout in tkinter?

Basically, I want to recreate this code using gridlayout:

from tkinter import *

m1 = PanedWindow()
m1.pack(fill=BOTH, expand=1)

left = Label(m1, text="left pane")
m1.add(left)

m2 = PanedWindow(m1, orient=VERTICAL)
m1.add(m2)

top = Label(m2, text="top pane")
m2.add(top)

bottom = Label(m2, text="bottom pane")
m2.add(bottom)

mainloop()

My code is as follows:

from tkinter import *
from tkinter import ttk

root = Tk()

root.title("PanedWindows")
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=1)
root.rowconfigure(0, weight=1)
root.rowconfigure(1, weight=1)

left_right_pane = PanedWindow(root, orient=HORIZONTAL, relief='groove', borderwidth=2)
left_right_pane.grid(column=0, row=0, sticky=(W,S,E,N), columnspan=2)
left_right_pane.rowconfigure(0, weight=1)
left_right_pane.columnconfigure(0, weight=1)
left_right_pane.rowconfigure(1, weight=1)
left_right_pane.columnconfigure(1, weight=1)

leftframe = ttk.Frame(root, relief='groove', borderwidth=2)
leftframe.grid(column=0, row=0, sticky=(N, W, E, S), rowspan=2)
leftframe.rowconfigure(0, weight=1)
leftframe.columnconfigure(0, weight=1)
left_right_pane.add(leftframe)

top_bottom_pane = PanedWindow(root, orient=VERTICAL)
top_bottom_pane.grid(column=1, row=0, rowspan=2, sticky=(N, W, E, S))
top_bottom_pane.rowconfigure(0, weight=1)
top_bottom_pane.columnconfigure(0, weight=1)
left_right_pane.add(top_bottom_pane)

upperframe = ttk.Frame(root, relief='groove', borderwidth=2)
upperframe.grid(column=1, row=0, sticky=(N, W, E, S))
upperframe.columnconfigure(1, weight=1)
upperframe.rowconfigure(0, weight=1)
top_bottom_pane.add(upperframe)

bottomframe = ttk.Frame(top_bottom_pane, relief='groove', borderwidth=2)
bottomframe.grid(column=1, row=1, sticky=(N, W, E, S))
bottomframe.columnconfigure(1, weight=1)
bottomframe.rowconfigure(1, weight=1)
top_bottom_pane.add(bottomframe)

entry = ttk.Entry(leftframe)
entry.grid(column=0, row=0, sticky=(W,S,E,N))

top = Label(upperframe, text="top pane")
top.grid(column=1, row=0, sticky=(W,S,E,N))

bottom = Label(bottomframe, text="bottom pane")
bottom.grid(column=1, row=1, sticky=(W,S,E,N))

mainloop()

The code got a bit out of control, as I started experimenting with all kinds of solutions, basically I looped every element in all directions and added weight to each row and column, and yet it refuses to work. It seems that tkinter treats my panedwindows as separate cells, so when I expand them, only one element expands in them, and I would like all the elements to be equally expanded.

+4
source share
1 answer

, pack grid, Panedwindow . .

, :

m1.pack(fill=BOTH, expand=1)

:

root = Tk()

m1.grid(row=0, column=0, sticky ="nsew")
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

/

, . , . , Panedwindow .

, / , stretch="always" , :

m1.add(left, stretch="always")
m1.add(m2, stretch="always")
m2.add(top, stretch="always")
m2.add(bottom, stretch="always")

. stretch: "first", "last", "middle" "never". man tcl/tk tkinter. . http://tcl.tk/man/tcl8.5/TkCmd/panedwindow.htm#M32

+4

Source: https://habr.com/ru/post/1568879/


All Articles