54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
|
import Tkinter
|
||
|
import Pmw
|
||
|
|
||
|
class ScrolledField(Pmw.MegaWidget):
|
||
|
def __init__(self, parent = None, **kw):
|
||
|
|
||
|
# Define the megawidget options.
|
||
|
INITOPT = Pmw.INITOPT
|
||
|
optiondefs = (
|
||
|
('labelmargin', 0, INITOPT),
|
||
|
('labelpos', None, INITOPT),
|
||
|
('sticky', 'ew', INITOPT),
|
||
|
('text', '', self._text),
|
||
|
)
|
||
|
self.defineoptions(kw, optiondefs)
|
||
|
|
||
|
# Initialise the base class (after defining the options).
|
||
|
Pmw.MegaWidget.__init__(self, parent)
|
||
|
|
||
|
# Create the components.
|
||
|
interior = self.interior()
|
||
|
self._scrolledFieldEntry = self.createcomponent('entry',
|
||
|
(), None,
|
||
|
Tkinter.Entry, (interior,))
|
||
|
|
||
|
# Can't always use 'disabled', since this greys out text in Tk 8.4.2
|
||
|
try:
|
||
|
self._scrolledFieldEntry.configure(state = 'readonly')
|
||
|
except Tkinter.TclError:
|
||
|
self._scrolledFieldEntry.configure(state = 'disabled')
|
||
|
|
||
|
self._scrolledFieldEntry.grid(column=2, row=2, sticky=self['sticky'])
|
||
|
interior.grid_columnconfigure(2, weight=1)
|
||
|
interior.grid_rowconfigure(2, weight=1)
|
||
|
|
||
|
self.createlabel(interior)
|
||
|
|
||
|
# Check keywords and initialise options.
|
||
|
self.initialiseoptions()
|
||
|
|
||
|
def _text(self):
|
||
|
text = self['text']
|
||
|
self._scrolledFieldEntry.configure(state = 'normal')
|
||
|
self._scrolledFieldEntry.delete(0, 'end')
|
||
|
self._scrolledFieldEntry.insert('end', text)
|
||
|
|
||
|
# Can't always use 'disabled', since this greys out text in Tk 8.4.2
|
||
|
try:
|
||
|
self._scrolledFieldEntry.configure(state = 'readonly')
|
||
|
except Tkinter.TclError:
|
||
|
self._scrolledFieldEntry.configure(state = 'disabled')
|
||
|
|
||
|
Pmw.forwardmethods(ScrolledField, Tkinter.Entry, '_scrolledFieldEntry')
|