Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | title = 'Pmw.ScrolledText demonstration' |
2 | ||
3 | # Import Pmw from this directory tree. | |
4 | import sys | |
5 | sys.path[:0] = ['../../..'] | |
6 | ||
7 | import os | |
8 | import math | |
9 | import string | |
10 | import Tkinter | |
11 | import Pmw | |
12 | ||
13 | class Demo: | |
14 | def __init__(self, parent): | |
15 | ||
16 | # Create the ScrolledText with headers. | |
17 | fixedFont = Pmw.logicalfont('Fixed') | |
18 | self.st = Pmw.ScrolledText(parent, | |
19 | # borderframe = 1, | |
20 | labelpos = 'n', | |
21 | label_text='ScrolledText with headers', | |
22 | columnheader = 1, | |
23 | rowheader = 1, | |
24 | rowcolumnheader = 1, | |
25 | usehullsize = 1, | |
26 | hull_width = 400, | |
27 | hull_height = 300, | |
28 | text_wrap='none', | |
29 | text_font = fixedFont, | |
30 | Header_font = fixedFont, | |
31 | Header_foreground = 'blue', | |
32 | rowheader_width = 3, | |
33 | rowcolumnheader_width = 3, | |
34 | text_padx = 4, | |
35 | text_pady = 4, | |
36 | Header_padx = 4, | |
37 | rowheader_pady = 4, | |
38 | ) | |
39 | ||
40 | self.st.pack(padx = 5, pady = 5, fill = 'both', expand = 1) | |
41 | ||
42 | funcs = 'atan cos cosh exp log log10 sin sinh sqrt tan tanh' | |
43 | funcs = string.split(funcs) | |
44 | ||
45 | # Create the header for the row headers | |
46 | self.st.component('rowcolumnheader').insert('end', 'x') | |
47 | ||
48 | # Create the column headers | |
49 | headerLine = '' | |
50 | for column in range(len(funcs)): | |
51 | headerLine = headerLine + ('%-7s ' % (funcs[column],)) | |
52 | headerLine = headerLine[:-3] | |
53 | self.st.component('columnheader').insert('0.0', headerLine) | |
54 | ||
55 | self.st.tag_configure('yellow', background = 'yellow') | |
56 | ||
57 | # Create the data rows and the row headers | |
58 | numRows = 50 | |
59 | tagList = [] | |
60 | for row in range(1, numRows): | |
61 | dataLine = '' | |
62 | x = row / 5.0 | |
63 | for column in range(len(funcs)): | |
64 | value = eval('math.' + funcs[column] + '(' + str(x) + ')') | |
65 | data = str(value)[:7] | |
66 | if value < 0: | |
67 | tag1 = '%d.%d' % (row, len(dataLine)) | |
68 | tag2 = '%d.%d' % (row, len(dataLine) + len(data)) | |
69 | tagList.append(tag1) | |
70 | tagList.append(tag2) | |
71 | data = '%-7s' % (data,) | |
72 | dataLine = dataLine + data + ' ' | |
73 | dataLine = dataLine[:-3] | |
74 | header = '%.1f' % (x,) | |
75 | if row < numRows - 1: | |
76 | dataLine = dataLine + '\n' | |
77 | header = header + '\n' | |
78 | self.st.insert('end', dataLine) | |
79 | self.st.component('rowheader').insert('end', header) | |
80 | apply(self.st.tag_add, ('yellow',) + tuple(tagList)) | |
81 | ||
82 | # Prevent users' modifying text and headers | |
83 | self.st.configure( | |
84 | text_state = 'disabled', | |
85 | Header_state = 'disabled', | |
86 | ) | |
87 | ||
88 | ###################################################################### | |
89 | ||
90 | # Create demo in root window for testing. | |
91 | if __name__ == '__main__': | |
92 | root = Tkinter.Tk() | |
93 | Pmw.initialise(root) | |
94 | root.title(title) | |
95 | ||
96 | exitButton = Tkinter.Button(root, text = 'Exit', command = root.destroy) | |
97 | exitButton.pack(side = 'bottom') | |
98 | widget = Demo(root) | |
99 | root.mainloop() |