Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | import Tkinter |
2 | import Pmw | |
3 | ||
4 | class ScrolledField(Pmw.MegaWidget): | |
5 | def __init__(self, parent = None, **kw): | |
6 | ||
7 | # Define the megawidget options. | |
8 | INITOPT = Pmw.INITOPT | |
9 | optiondefs = ( | |
10 | ('labelmargin', 0, INITOPT), | |
11 | ('labelpos', None, INITOPT), | |
12 | ('sticky', 'ew', INITOPT), | |
13 | ('text', '', self._text), | |
14 | ) | |
15 | self.defineoptions(kw, optiondefs) | |
16 | ||
17 | # Initialise the base class (after defining the options). | |
18 | Pmw.MegaWidget.__init__(self, parent) | |
19 | ||
20 | # Create the components. | |
21 | interior = self.interior() | |
22 | self._scrolledFieldEntry = self.createcomponent('entry', | |
23 | (), None, | |
24 | Tkinter.Entry, (interior,)) | |
25 | ||
26 | # Can't always use 'disabled', since this greys out text in Tk 8.4.2 | |
27 | try: | |
28 | self._scrolledFieldEntry.configure(state = 'readonly') | |
29 | except Tkinter.TclError: | |
30 | self._scrolledFieldEntry.configure(state = 'disabled') | |
31 | ||
32 | self._scrolledFieldEntry.grid(column=2, row=2, sticky=self['sticky']) | |
33 | interior.grid_columnconfigure(2, weight=1) | |
34 | interior.grid_rowconfigure(2, weight=1) | |
35 | ||
36 | self.createlabel(interior) | |
37 | ||
38 | # Check keywords and initialise options. | |
39 | self.initialiseoptions() | |
40 | ||
41 | def _text(self): | |
42 | text = self['text'] | |
43 | self._scrolledFieldEntry.configure(state = 'normal') | |
44 | self._scrolledFieldEntry.delete(0, 'end') | |
45 | self._scrolledFieldEntry.insert('end', text) | |
46 | ||
47 | # Can't always use 'disabled', since this greys out text in Tk 8.4.2 | |
48 | try: | |
49 | self._scrolledFieldEntry.configure(state = 'readonly') | |
50 | except Tkinter.TclError: | |
51 | self._scrolledFieldEntry.configure(state = 'disabled') | |
52 | ||
53 | Pmw.forwardmethods(ScrolledField, Tkinter.Entry, '_scrolledFieldEntry') |