mirror of https://github.com/python/cpython
Issue #3248: Allow placing ScrolledText in a PanedWindow.
This commit is contained in:
parent
80b59054c6
commit
e2eb2b4bc3
|
@ -1,43 +1,52 @@
|
|||
# A ScrolledText widget feels like a text widget but also has a
|
||||
# vertical scroll bar on its right. (Later, options may be added to
|
||||
# add a horizontal bar as well, to make the bars disappear
|
||||
# automatically when not needed, to move them to the other side of the
|
||||
# window, etc.)
|
||||
#
|
||||
# Configuration options are passed to the Text widget.
|
||||
# A Frame widget is inserted between the master and the text, to hold
|
||||
# the Scrollbar widget.
|
||||
# Most methods calls are inherited from the Text widget; Pack methods
|
||||
# are redirected to the Frame widget however.
|
||||
"""A ScrolledText widget feels like a text widget but also has a
|
||||
vertical scroll bar on its right. (Later, options may be added to
|
||||
add a horizontal bar as well, to make the bars disappear
|
||||
automatically when not needed, to move them to the other side of the
|
||||
window, etc.)
|
||||
|
||||
from Tkinter import *
|
||||
from Tkinter import _cnfmerge
|
||||
Configuration options are passed to the Text widget.
|
||||
A Frame widget is inserted between the master and the text, to hold
|
||||
the Scrollbar widget.
|
||||
Most methods calls are inherited from the Text widget; Pack, Grid and
|
||||
Place methods are redirected to the Frame widget however.
|
||||
"""
|
||||
|
||||
__all__ = ['ScrolledText']
|
||||
|
||||
from Tkinter import Frame, Text, Scrollbar, Pack, Grid, Place
|
||||
from Tkconstants import RIGHT, LEFT, Y, BOTH
|
||||
|
||||
class ScrolledText(Text):
|
||||
def __init__(self, master=None, cnf=None, **kw):
|
||||
if cnf is None:
|
||||
cnf = {}
|
||||
if kw:
|
||||
cnf = _cnfmerge((cnf, kw))
|
||||
fcnf = {}
|
||||
for k in cnf.keys():
|
||||
if type(k) == ClassType or k == 'name':
|
||||
fcnf[k] = cnf[k]
|
||||
del cnf[k]
|
||||
self.frame = Frame(master, **fcnf)
|
||||
self.vbar = Scrollbar(self.frame, name='vbar')
|
||||
def __init__(self, master=None, **kw):
|
||||
self.frame = Frame(master)
|
||||
self.vbar = Scrollbar(self.frame)
|
||||
self.vbar.pack(side=RIGHT, fill=Y)
|
||||
cnf['name'] = 'text'
|
||||
Text.__init__(self, self.frame, **cnf)
|
||||
self.pack(side=LEFT, fill=BOTH, expand=1)
|
||||
self['yscrollcommand'] = self.vbar.set
|
||||
|
||||
kw.update({'yscrollcommand': self.vbar.set})
|
||||
Text.__init__(self, self.frame, **kw)
|
||||
self.pack(side=LEFT, fill=BOTH, expand=True)
|
||||
self.vbar['command'] = self.yview
|
||||
|
||||
# Copy geometry methods of self.frame -- hack!
|
||||
methods = Pack.__dict__.keys()
|
||||
methods = methods + Grid.__dict__.keys()
|
||||
methods = methods + Place.__dict__.keys()
|
||||
methods = vars(Pack).keys() + vars(Grid).keys() + vars(Place).keys()
|
||||
|
||||
for m in methods:
|
||||
if m[0] != '_' and m != 'config' and m != 'configure':
|
||||
setattr(self, m, getattr(self.frame, m))
|
||||
|
||||
def __str__(self):
|
||||
return str(self.frame)
|
||||
|
||||
|
||||
def example():
|
||||
import __main__
|
||||
from Tkconstants import END
|
||||
|
||||
stext = ScrolledText(bg='white', height=10)
|
||||
stext.insert(END, __main__.__doc__)
|
||||
stext.pack(fill=BOTH, side=LEFT, expand=True)
|
||||
stext.focus_set()
|
||||
stext.mainloop()
|
||||
|
||||
if __name__ == "__main__":
|
||||
example()
|
||||
|
|
Loading…
Reference in New Issue