JavaScript
x
12
12
1
import tkinter as tk
2
root = tk.Tk()
3
my_paned_window = tk.PanedWindow(master=root)
4
frame1 = tk.Frame(master=my_paned_window, bg='snow')
5
frame2 = tk.Frame(master=my_paned_window)
6
tk.Label(master=frame1, text='frame1').pack()
7
tk.Label(master=frame2, text='frame2').pack()
8
my_paned_window.add(frame1)
9
my_paned_window.add(frame2)
10
my_paned_window.pack(fill=tk.BOTH)
11
root.mainloop()
12
In the above code, I don’t want the frame1 to expand too much when dragged. How can I set a limit for this?
Advertisement
Answer
There are no straightforward ways to do this. You can achieve this either by setting minsize
for frame2.
Something like this:
JavaScript
1
5
1
2
my_paned_window.add(frame1)
3
my_paned_window.add(frame2, minsize=550)
4
5
Another way is to return "break"
when the sash position is greater than the max-width so it no longer can be moved.
minimal example:
JavaScript
1
45
45
1
import tkinter as tk
2
3
class PanedWindow(tk.PanedWindow):
4
5
def __init__(self, *args, **kwargs):
6
super(PanedWindow, self).__init__(*args, **kwargs)
7
self.max_width = {}
8
self.bind("<B1-Motion>", self.check_width)
9
self.bind("<ButtonRelease-1>", self.set_width)
10
11
def add(self, child, max_width=None, *args):
12
super(PanedWindow, self).add(child, *args)
13
self.max_width[child] = max_width
14
15
def check_width(self, event):
16
17
for widget, width in self.max_width.items():
18
if width and widget.winfo_width() >= width:
19
self.paneconfig(widget, width=width)
20
return "break"
21
22
def set_width(self, event):
23
for widget, width in self.max_width.items():
24
if width and widget.winfo_width() >= width:
25
self.paneconfig(widget, width=width-1)
26
27
28
root = tk.Tk()
29
my_paned_window = PanedWindow(master=root, sashwidth=5)
30
31
max_width = 500
32
33
frame1 = tk.Frame(master=my_paned_window, bg='red')
34
frame2 = tk.Frame(master=my_paned_window, bg='blue')
35
frame3 = tk.Frame(master=my_paned_window, bg="green")
36
37
tk.Label(master=frame1, text='frame1').pack()
38
tk.Label(master=frame2, text='frame2').pack()
39
40
my_paned_window.add(frame1, max_width=500)
41
my_paned_window.add(frame2)
42
my_paned_window.pack(fill=tk.BOTH, expand=True)
43
44
root.mainloop()
45