3
The TextViewer allows you to see how the selected color would affect various
4
characteristics of a Tk text widget. This is an output viewer only.
6
In the top part of the window is a standard text widget with some sample text
7
in it. You are free to edit this text in any way you want (BAW: allow you to
8
change font characteristics). If you want changes in other viewers to update
9
text characteristics, turn on Track color changes.
11
To select which characteristic tracks the change, select one of the radio
12
buttons in the window below. Text foreground and background affect the text
13
in the window above. The Selection is what you see when you click the middle
14
button and drag it through some text. The Insertion is the insertion cursor
15
in the text window (which only has a background).
21
ADDTOVIEW = 'Text Window...'
26
def __init__(self, switchboard, master=None):
27
self.__sb = switchboard
28
optiondb = switchboard.optiondb()
29
root = self.__root = Toplevel(master, class_='Pynche')
30
root.protocol('WM_DELETE_WINDOW', self.withdraw)
31
root.title('Pynche Text Window')
32
root.iconname('Pynche Text Window')
33
root.bind('<Alt-q>', self.__quit)
34
root.bind('<Alt-Q>', self.__quit)
35
root.bind('<Alt-w>', self.withdraw)
36
root.bind('<Alt-W>', self.withdraw)
38
# create the text widget
40
self.__text = Text(root, relief=SUNKEN,
41
background=optiondb.get('TEXTBG', 'black'),
42
foreground=optiondb.get('TEXTFG', 'white'),
44
sfg = optiondb.get('TEXT_SFG')
46
self.__text.configure(selectforeground=sfg)
47
sbg = optiondb.get('TEXT_SBG')
49
self.__text.configure(selectbackground=sbg)
50
ibg = optiondb.get('TEXT_IBG')
52
self.__text.configure(insertbackground=ibg)
54
self.__text.insert(0.0, optiondb.get('TEXT', '''\
55
Insert some stuff here and play
56
with the buttons below to see
57
how the colors interact in
60
See how the selection can also
61
be affected by tickling the buttons
62
and choosing a color.'''))
63
insert = optiondb.get('TEXTINS')
65
self.__text.mark_set(INSERT, insert)
67
start, end = optiondb.get('TEXTSEL', (6.0, END))
68
self.__text.tag_add(SEL, start, end)
70
# selection wasn't set
72
self.__text.focus_set()
75
self.__trackp = BooleanVar()
76
self.__trackp.set(optiondb.get('TRACKP', 0))
77
self.__which = IntVar()
78
self.__which.set(optiondb.get('WHICH', 0))
81
self.__t = Checkbutton(root, text='Track color changes',
82
variable=self.__trackp,
84
command=self.__toggletrack)
85
self.__t.pack(fill=X, expand=YES)
86
frame = self.__frame = Frame(root)
92
for text in ('Text:', 'Selection:', 'Insertion:'):
93
l = Label(frame, text=text)
94
l.grid(row=row, column=0, sticky=E)
95
self.__labels.append(l)
98
for text in ('Foreground', 'Background'):
99
l = Label(frame, text=text)
100
l.grid(row=1, column=col)
101
self.__labels.append(l)
107
for row in (2, 3, 4):
108
# there is no insertforeground option
109
if row==4 and col==1:
111
r = Radiobutton(frame, variable=self.__which,
112
value=(row-2)*2 + col-1,
113
command=self.__set_color)
114
r.grid(row=row, column=col)
115
self.__radios.append(r)
118
def __quit(self, event=None):
121
def withdraw(self, event=None):
122
self.__root.withdraw()
124
def deiconify(self, event=None):
125
self.__root.deiconify()
127
def __forceupdate(self, event=None):
128
self.__sb.update_views_current()
130
def __toggletrack(self, event=None):
131
if self.__trackp.get():
133
fg = self.__radios[0]['foreground']
136
fg = self.__radios[0]['disabledforeground']
137
for r in self.__radios:
138
r.configure(state=state)
139
for l in self.__labels:
140
l.configure(foreground=fg)
142
def __set_color(self, event=None):
143
which = self.__which.get()
146
color = text['foreground']
148
color = text['background']
150
color = text['selectforeground']
152
color = text['selectbackground']
154
color = text['insertbackground']
156
red, green, blue = ColorDB.rrggbb_to_triplet(color)
157
except ColorDB.BadColor:
158
# must have been a color name
159
red, green, blue = self.__sb.colordb().find_byname(color)
160
self.__sb.update_views(red, green, blue)
162
def update_yourself(self, red, green, blue):
163
if self.__trackp.get():
164
colorname = ColorDB.triplet_to_rrggbb((red, green, blue))
165
which = self.__which.get()
168
text.configure(foreground=colorname)
170
text.configure(background=colorname)
172
text.configure(selectforeground=colorname)
174
text.configure(selectbackground=colorname)
176
text.configure(insertbackground=colorname)
178
def save_options(self, optiondb):
179
optiondb['TRACKP'] = self.__trackp.get()
180
optiondb['WHICH'] = self.__which.get()
181
optiondb['TEXT'] = self.__text.get(0.0, 'end - 1c')
182
optiondb['TEXTSEL'] = self.__text.tag_ranges(SEL)[0:2]
183
optiondb['TEXTINS'] = self.__text.index(INSERT)
184
optiondb['TEXTFG'] = self.__text['foreground']
185
optiondb['TEXTBG'] = self.__text['background']
186
optiondb['TEXT_SFG'] = self.__text['selectforeground']
187
optiondb['TEXT_SBG'] = self.__text['selectbackground']
188
optiondb['TEXT_IBG'] = self.__text['insertbackground']