5 def __init__(self
, master
, orient
, min=10, thickness
=5, bg
=None):
7 self
.thickness
= max(1, thickness
)
8 if orient
in ("h", "horizontal"):
12 self
.cursor
= "sb_h_double_arrow"
13 elif orient
in ("v", "vertical"):
17 self
.cursor
= "sb_v_double_arrow"
19 raise ValueError, "Separator: orient should be h or v"
20 self
.winfo_dim
= "winfo_" + self
.dim
21 self
.master
= master
= Frame(master
)
22 master
.pack(expand
=1, fill
="both")
23 self
.f1
= Frame(master
)
24 self
.f1
.pack(expand
=1, fill
="both", side
=self
.side
)
25 self
.div
= Frame(master
, cursor
=self
.cursor
)
26 self
.div
[self
.dim
] = self
.thickness
27 self
.div
.pack(fill
="both", side
=self
.side
)
28 self
.f2
= Frame(master
)
29 self
.f2
.pack(expand
=1, fill
="both", side
=self
.side
)
30 self
.div
.bind("<ButtonPress-1>", self
.divider_press
)
37 return self
.f1
, self
.f2
39 def divider_press(self
, event
):
40 self
.press_event
= event
41 self
.f1
.pack_propagate(0)
42 self
.f2
.pack_propagate(0)
43 for f
in self
.f1
, self
.f2
:
44 for dim
in "width", "height":
45 f
[dim
] = getattr(f
, "winfo_"+dim
)()
46 self
.div
.bind("<Motion>", self
.div_motion
)
47 self
.div
.bind("<ButtonRelease-1>", self
.div_release
)
50 def div_motion(self
, event
):
51 delta
= getattr(event
, self
.dir) - getattr(self
.press_event
, self
.dir)
53 dim1
= getattr(self
.f1
, self
.winfo_dim
)()
54 dim2
= getattr(self
.f2
, self
.winfo_dim
)()
55 delta
= max(delta
, self
.min-dim1
)
56 delta
= min(delta
, dim2
-self
.min)
59 self
.f1
[self
.dim
] = dim1
60 self
.f2
[self
.dim
] = dim2
62 def div_release(self
, event
):
63 self
.div_motion(event
)
64 self
.div
.unbind("<Motion>")
65 self
.div
.grab_release()
67 class VSeparator(Separator
):
69 def __init__(self
, master
, min=10, thickness
=5, bg
=None):
70 Separator
.__init
__(self
, master
, "v", min, thickness
, bg
)
72 class HSeparator(Separator
):
74 def __init__(self
, master
, min=10, thickness
=5, bg
=None):
75 Separator
.__init
__(self
, master
, "h", min, thickness
, bg
)
80 outer
= HSeparator(root
, bg
="red")
81 for part
in outer
.parts():
82 inner
= VSeparator(part
, bg
="blue")
83 for f
in inner
.parts():
84 t
= Text(f
, width
=40, height
=10, borderwidth
=0)
85 t
.pack(fill
="both", expand
=1)
87 tlist
[0].insert("1.0", "Make your own Mondrian!")
88 tlist
[1].insert("1.0", "Move the colored dividers...")
91 if __name__
== '__main__':