1 """A ScrolledText widget feels like a text widget but also has a
2 vertical scroll bar on its right. (Later, options may be added to
3 add a horizontal bar as well, to make the bars disappear
4 automatically when not needed, to move them to the other side of the
7 Configuration options are passed to the Text widget.
8 A Frame widget is inserted between the master and the text, to hold
10 Most methods calls are inherited from the Text widget; Pack, Grid and
11 Place methods are redirected to the Frame widget however.
14 __all__
= ['ScrolledText']
16 from Tkinter
import Frame
, Text
, Scrollbar
, Pack
, Grid
, Place
17 from Tkconstants
import RIGHT
, LEFT
, Y
, BOTH
19 class ScrolledText(Text
):
20 def __init__(self
, master
=None, **kw
):
21 self
.frame
= Frame(master
)
22 self
.vbar
= Scrollbar(self
.frame
)
23 self
.vbar
.pack(side
=RIGHT
, fill
=Y
)
25 kw
.update({'yscrollcommand': self
.vbar
.set})
26 Text
.__init
__(self
, self
.frame
, **kw
)
27 self
.pack(side
=LEFT
, fill
=BOTH
, expand
=True)
28 self
.vbar
['command'] = self
.yview
30 # Copy geometry methods of self.frame without overriding Text
32 text_meths
= vars(Text
).keys()
33 methods
= vars(Pack
).keys() + vars(Grid
).keys() + vars(Place
).keys()
34 methods
= set(methods
).difference(text_meths
)
37 if m
[0] != '_' and m
!= 'config' and m
!= 'configure':
38 setattr(self
, m
, getattr(self
.frame
, m
))
41 return str(self
.frame
)
46 from Tkconstants
import END
48 stext
= ScrolledText(bg
='white', height
=10)
49 stext
.insert(END
, __main__
.__doc
__)
50 stext
.pack(fill
=BOTH
, side
=LEFT
, expand
=True)
54 if __name__
== "__main__":