Skip to content

Commit 693dc34

Browse files
committed
Added removing a font from the favorites list Made resizing of window work better Added option to prepend "#" onto front of each line with Navigating with arrow keys while in font list will select fonts so that previewing can be done quickly
1 parent b8b7fc1 commit 693dc34

2 files changed

Lines changed: 58 additions & 30 deletions

File tree

psgfiglet/psgfiglet.py

Lines changed: 57 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66

77
import PySimpleGUI as sg
88
import sys
9-
import os
109
import pyfiglet
1110

12-
version = '6.1'
11+
version = '6.1.1'
1312
__version__ = version.split()[0]
1413

1514
"""
@@ -21,6 +20,10 @@
2120
6.0.1 10-Apr-2026 Made Font list expand/contract with window. Sort favorites.
2221
6.0.2 15-Jun-2026 Added filtering of the font list to make finding fonts much easier.
2322
6.1 17-Jun-2026 Preparing for PyPI release
23+
6.1.1 25-Jun-2026 Added removing a font from the favorites list
24+
Made resizing of window work better
25+
Added option to prepend "#" onto front of each line with
26+
Navigating with arrow keys while in font list will select fonts so that previewing can be done quickly
2427
"""
2528

2629

@@ -113,54 +116,62 @@ def change_theme(location):
113116
return None
114117

115118

116-
def draw_text(font, text, width=80):
119+
def draw_text(font, text, width=80, prepend_hash=False):
117120
"""Simple wrapper for the main draw function"""
118-
119-
return pyfiglet.Figlet(font=font, width=width).renderText(text)
120-
121+
text = pyfiglet.Figlet(font=font, width=width).renderText(text)
122+
if prepend_hash:
123+
lines = text.split('\n')
124+
new_lines = []
125+
for line in lines:
126+
new_lines.append(f'# {line}')
127+
text = '\n'.join(new_lines)
128+
return text
121129

122130
def make_window():
123-
selected_font = DEFAULT_FONT
131+
# selected_font = DEFAULT_FONT
124132
LINE_LENGTH = 100
125133
MULTILINE_FONT = ('Courier', 12)
126134
fonts = pyfiglet.FigletFont.getFonts()
127-
favorite_fonts = sg.user_settings_get_entry('-favorites-', [' '])
128-
if len(favorite_fonts) == 0:
129-
favorite_fonts = [' ']
130-
sg.theme_background_color(sg.theme_input_background_color())
131-
sg.theme_text_element_background_color(sg.theme_input_background_color())
135+
favorite_fonts = sg.user_settings_get_entry('-favorites-', [''])
136+
last_used_font = sg.user_settings_get_entry('-FONT-NAME-', '')
137+
# sg.theme_background_color(sg.theme_input_background_color())
138+
# sg.theme_text_element_background_color(sg.theme_input_background_color())
132139
# column_left = [[sg.Table(headings=['Font Name'], values=fonts, key='-FONT-LIST-',
133140
# col_widths=[40], num_rows=30, enable_events=True, expand_y=True), sg.VerticalSeparator(pad=((5, 5), 0))],
134141
# [sg.Input(s=20, k='-FILTER-')],[ sg.T('Filter')]]
135142
column_left = [[sg.Listbox(values=fonts, key='-FONT-LIST-',s=(30,30), justification='r', enable_events=True, expand_y=True, expand_x=True), sg.VerticalSeparator(pad=((5, 5), 0))],
136143
[sg.Input(s=20, k='-FILTER-', enable_events=True)],[ sg.T('Filter', justification='c', k='-FILTER-')]]
137144
mline_input = sg.Multiline('PySimpleGUI', size=(40, 3), key='-TEXT-TO-SHOW-', enable_events=True, focus=True)
138145

139-
column_right = [[sg.Combo(favorite_fonts, default_value=favorite_fonts[0], readonly=True, enable_events=True, k='-FAVORITES-', size=(max([len(f) for f in favorite_fonts]),30)), sg.Text("Font Name:", size=(10, 1)), sg.Input(selected_font, size=(12, 1), key='-FONT-NAME-'), sg.B('Add to favorites', k='-ADD TO FAVORITES-'), sg.B('Clear favorites', k='-CLEAR FAVORITES-')],
140-
[sg.Text("Text:", size=(10, 1)), mline_input, sg.T('Font size for display below'),
141-
sg.Combo(list(range(4, 20)), 12, enable_events=True, k='-FONT-SIZE-')],
146+
column_right = [[sg.Combo(favorite_fonts, default_value=last_used_font, readonly=True, enable_events=True, k='-FAVORITES-', size=(max([len(f) for f in favorite_fonts]),30)), sg.Text("Font Name:", size=(10, 1)), sg.Input(setting=DEFAULT_FONT, size=(12, 1), key='-FONT-NAME-'), sg.B('Add to favorites', k='-ADD TO FAVORITES-'), sg.B('Remove from favorites', k='-REMOVE FROM FAVORITES-'), sg.B('Clear favorites', k='-CLEAR FAVORITES-')],
147+
[sg.Text("Text:"), mline_input,
148+
sg.Column([[sg.T('Font size for display below'), sg.Combo(list(range(4, 20)), 12, enable_events=True, k='-FONT-SIZE-')],
149+
[sg.Checkbox('Prepend # onto front of each line', setting=False, k='-PREPEND COMMENT-', enable_events=True)]])],
142150
[sg.Multiline(size=(LINE_LENGTH, 20), key='-OUTPUT-', border_width=0, font=MULTILINE_FONT, expand_x=True, expand_y=True, pad=(40, 40), write_only=True,)],
143151
[sg.B('Copy to Clipboard'), sg.B('Change Theme')], ]
144152

145-
layout = [[sg.Column(column_left, expand_y=True, expand_x=False), sg.Column(column_right, expand_x=False, expand_y=False, k='-COL R-')],
153+
layout = [[sg.Column(column_left, expand_y=False, expand_x=False), sg.Column(column_right, expand_x=True, expand_y=True, k='-COL R-')],
146154
[sg.Button('Exit', right_click_menu=sg.MENU_RIGHT_CLICK_DISABLED),
147155
sg.T('PySimpleGUI ver ' + sg.version.split(' ')[0] + ' tkinter ver ' + sg.tclversion_detailed + ' Python ver ' + sys.version, font='Default 8',
148156
pad=(0, 0))], ]
149157
layout[-1].append(sg.Sizegrip())
150158

151159
icon = b'iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAMAAAC5zwKfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAH+UExURf/YAL2gAJB5AMysAP7XAG5dAAAAAAcFAEM4AHxpAPHMALKWACUfABQQAJiAAH9rAEA2AMurAO7JAFJFAMqrACQeACMdALWZAAsJAPbQAKGIAMipAKKJAJqCALebAGtaAAoIAD0zAG9eABgUAEs/AFVIAJV+AHhlAFFEABwXACchAMeoAOC9AKaMAGFSAOzHAAQDAPvUALGVAFlLANCwAN68ADAoAOfDAIl0ACojALOXALqdAGlYALibADcuAJZ/AJ6FAHZjANOyAFNGAA8MADEpAEQ5AAkHAHpnANi2AKyRAAYFAPzVAIBsAEo+AFBDAI95ABANANa1ACAbAPTOAPLMAOTBAE1BACwlABsWACskAEI3AFpMAHFfAIhzAMGjAGVVAAEAAEE3AGNTAKuQAPjSAH1pAB4ZAPPNAK2SAMCiAMWmAN27AIt1APXPACghACEbAL+hAA4LAFRHAHdkAJuDAMmqACYgAEk9AFxNAIFtAI54AI13AAwKAKqQAE9CANKxAKeNAObCAK6TAGxbANy6AHtoAMSmAD81AF1OANW0APnSAOPAAGZWAKmPAO3IAOXBAFhKADoxAOK/AO/KAGBRAIx2ABYSABEOAAUEAJJ7AGRUAHBeAHJgAJyEALmcAFdJAIZxANGxAKOKAAMCADsxACIcALaaAL6gAOG+AFD17/gAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALDSURBVFhH7df5W0xhFAfwS3VHUkpMqQYZ00Ixxq5FIYxMaLFEUhTJMhGFyDItpkRMdtm3/9Lcc78z7oy7vvc+jx/M55fe855zvs/TU93ucAkJ/8acuUk4WSI5hed527zU+ajNSlsQzhOkZ+DGnIWIE2Rm4ZLdomxkibJxzWzxEiSBHfescnIRFLUUHTZ5SJHIR4tJAUKkHOixWIaMGMvRZJC0AhkxCtFlsBIRsZzoMlglJriKiktKxSNBl8FqMWCNcC4rX+sUS34dNVm4xYD1KDnPBqo3ojRsE63zm1EKtmzdxvPbURhWIQZWooSq6h04GZYhBtagNK9WDNyJ0rxdlLcblQXqKHAPKgvspcB9qMzzUh5fhdK8/ZRXfwCleT4KbEBlgYMUeAiVBQ5ToHW/hY2U14TKpOaWliOpFBj3h8zg6LHjcf843aWtJ062nSpoL0vGjBGnkSKro6nzzNkuTOrTjVVl585jVJcibCmrxaQ+PdhSdgGT+vRiS1FJMyb1uYg1RZcwqNNlrMlIv+K08f4+DEY04quSq9iWqLvWf73CK36ffz10bvBtOMkT36IHqgdvpty67RgSila05IXfk+/cxVkbvTOoj/uFkeF7qDTQ/7tMFPLuCyNh/Q9woeYhjao/+ztpRhDw4krRCD0JR1HJG6MscKXhVl5voTA0jkrBI0qKsvuCaMSZ8FTaacKt/qSepKEY9sdTT9CNeDo1bUOXz8OdglGMxXnWXZOT9XyC40Ij+Y6ZAdwKXmBRyUvMyXv1GocozYdUHwZ1msGaijcY1eUtllS9w7AO77GioRjjmnxY0CT9FK3CwKvHbD12VPg/YFiX4DjWFH0MYVSvTzKPZYkhjBkQUvnZTH/GkDGTPunnwD8G2zHA4EvDV6RE5Lo86DHq8gS+Rd6xOr4HfuDapODPntnysV+oEhIS/jsc9xvWwm7SqLETuAAAAABJRU5ErkJggg=='
152160

153-
try:
154-
favorite_fonts.remove(' ')
155-
except:
156-
pass
157161

158-
window = sg.Window('psgfiglet', layout, resizable=True, finalize=True, right_click_menu=['_', ['Edit Me', 'Copy', 'File Location','Exit']], icon=icon, auto_save_location=True)
162+
163+
window = sg.Window('psgfiglet', layout, resizable=True, finalize=True, right_click_menu=['_', ['Edit Me', 'Copy', 'File Location','Exit']], icon=icon, auto_save_location=True, enable_close_attempted_event=True)
164+
165+
window.settings_restore()
159166

160167
window['-COL R-'].expand(True, True, True)
161168
# window['-OUTPUT-'].expand(True, True, False)
162169
# window['-FONT-LIST-'].expand(False, False, False)
163-
window['-OUTPUT-'].update(draw_text(selected_font, 'PySimpleGUI').strip())
170+
initial_font = window['-FONT-NAME-'].get()
171+
initial_font = DEFAULT_FONT if not initial_font else initial_font # if blank font, then use default
172+
window['-OUTPUT-'].update(draw_text(initial_font, 'PySimpleGUI').strip())
173+
window['-FONT-LIST-'].bind('<Down>', '+DOWN')
174+
window['-FONT-LIST-'].bind('<Up>', '+UP')
164175
return window
165176

166177

@@ -175,16 +186,17 @@ def main():
175186
# sg.theme_background_color('#36393F')
176187
# sg.theme_input_text_color('white')
177188
window = make_window()
178-
selected_font = DEFAULT_FONT
179189
MULTILINE_FONT = ('Courier', 12)
180190
fonts = pyfiglet.FigletFont.getFonts()
181-
favorite_fonts = sg.user_settings_get_entry('-favorites-', [' '])
191+
favorite_fonts = sg.user_settings_get_entry('-favorites-', [''])
192+
favorite_fonts = [x for x in favorite_fonts if x.strip()]
182193
favorite_fonts.sort()
183194

184195
while True: # Event Loop
185196
event, values = window.read()
186-
print(event,values)
187-
if event == sg.WIN_CLOSED or event == 'Exit':
197+
# print(event,values)
198+
if event in ('Exit', sg.WIN_CLOSED, sg.WINDOW_CLOSE_ATTEMPTED_EVENT):
199+
window.settings_save(values)
188200
break
189201
if event == '-FONT-SIZE-':
190202
MULTILINE_FONT = (MULTILINE_FONT[0], values['-FONT-SIZE-'])
@@ -194,24 +206,32 @@ def main():
194206
#first one is the selected, no multi-select allowed.
195207
selected_font = values['-FONT-LIST-'][0]
196208
window['-FONT-NAME-'].update(selected_font)
197-
209+
values['-FONT-NAME-'] = selected_font
198210
elif event == 'Edit Me':
199211
sg.execute_editor(__file__)
200212
elif event == 'File Location':
201213
sg.popup_scrolled('This Python file is:', __file__)
202214
elif event == '-FAVORITES-':
203215
selected_font = values['-FAVORITES-']
204216
window['-FONT-NAME-'].update(selected_font)
217+
values['-FONT-NAME-'] = selected_font
218+
elif event.endswith(('+DOWN', '+UP')): # if using arrow keys in the list of fonts
219+
index = window['-FONT-LIST-'].widget.index(sg.tk.ACTIVE)
220+
selected_font = fonts[index]
221+
window['-FONT-LIST-'].update(set_to_index=index)
222+
window['-FONT-NAME-'].update(selected_font)
223+
values['-FONT-NAME-'] = selected_font
205224

206225
# Show the new figlet if something changed
207-
if event in ('Show', '-TEXT-TO-SHOW-', '-FONT-SIZE-', '-FONT-LIST-', '-FAVORITES-'):
226+
if event in ('Show', '-TEXT-TO-SHOW-', '-FONT-SIZE-', '-FONT-LIST-', '-FAVORITES-', '-PREPEND COMMENT-', '-FONT-LIST-+UP', '-FONT-LIST-+DOWN'):
208227
text = values['-TEXT-TO-SHOW-']
228+
selected_font = values['-FONT-NAME-']
209229
if text.strip() == '':
210230
text = selected_font.strip()
211231
# fancy way of detecting the size of the multiline so the window can be resized
212232
# line_length = window["-OUTPUT-"].get_size()[0] // sg.Text.char_width_in_pixels(MULTILINE_FONT)
213233
line_length = window["-OUTPUT-"].get_size()[0] // sg.tkinter.font.Font(font=MULTILINE_FONT).measure('A')
214-
window['-OUTPUT-'].update(draw_text(selected_font, text, line_length).rstrip())
234+
window['-OUTPUT-'].update(draw_text(selected_font, text, line_length, prepend_hash=values['-PREPEND COMMENT-']).rstrip())
215235
elif event.startswith('Copy'):
216236
sg.clipboard_set(window['-OUTPUT-'].get())
217237
elif event == 'Change Theme':
@@ -224,6 +244,11 @@ def main():
224244
favorite_fonts.sort()
225245
sg.user_settings_set_entry('-favorites-', favorite_fonts)
226246
window['-FAVORITES-'].update(value=values['-FONT-NAME-'], values=favorite_fonts)
247+
elif event == '-REMOVE FROM FAVORITES-':
248+
favorite_fonts.remove(values['-FONT-NAME-'])
249+
sg.user_settings_set_entry('-favorites-', favorite_fonts)
250+
value = favorite_fonts[0] if len(favorite_fonts) else ''
251+
window['-FAVORITES-'].update(value=value, values=favorite_fonts)
227252
elif event == '-CLEAR FAVORITES-':
228253
favorite_fonts = []
229254
sg.user_settings_set_entry('-favorites-', favorite_fonts)
@@ -234,6 +259,9 @@ def main():
234259
else:
235260
font_list = list(font for font in fonts if values[event] in font)
236261
window['-FONT-LIST-'].update(font_list)
262+
263+
264+
237265
window.close()
238266

239267
if __name__ == '__main__':

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def readme():
1111

1212
setuptools.setup(
1313
name="psgfiglet",
14-
version="6.1",
14+
version="6.1.1",
1515
author="PySimpleGUI",
1616
install_requires=["PySimpleGUI","pyfiglet"],
1717
description="Create Figlets using a PySimpleGUI GUI and pyfiglet. A PySimpleGUI Demo Program.",

0 commit comments

Comments
 (0)