diff --git a/DemoPrograms/Demo_pyfiglet.py b/DemoPrograms/Demo_pyfiglet.py index 1649fd02..6560bf3c 100644 --- a/DemoPrograms/Demo_pyfiglet.py +++ b/DemoPrograms/Demo_pyfiglet.py @@ -5,6 +5,24 @@ import pyfiglet """ Demo pyfiglet integration + '##:::::'##:'##::::'##::::'###::::'########::::'####::'######:: + ##:'##: ##: ##:::: ##:::'## ##:::... ##..:::::. ##::'##... ##: + ##: ##: ##: ##:::: ##::'##:. ##::::: ##:::::::: ##:: ##:::..:: + ##: ##: ##: #########:'##:::. ##:::: ##:::::::: ##::. ######:: + ##: ##: ##: ##.... ##: #########:::: ##:::::::: ##:::..... ##: + ##: ##: ##: ##:::: ##: ##.... ##:::: ##:::::::: ##::'##::: ##: + . ###. ###:: ##:::: ##: ##:::: ##:::: ##:::::::'####:. ######:: + :...::...:::..:::::..::..:::::..:::::..::::::::....:::......::: + :::'###:::::::'########:'####::'######:::'##:::::::'########:'########::'#######:: + ::'## ##:::::: ##.....::. ##::'##... ##:: ##::::::: ##.....::... ##..::'##.... ##: + :'##:. ##::::: ##:::::::: ##:: ##:::..::: ##::::::: ##:::::::::: ##::::..:::: ##:: + '##:::. ##:::: ######:::: ##:: ##::'####: ##::::::: ######:::::: ##:::::::: ###::: + #########:::: ##...::::: ##:: ##::: ##:: ##::::::: ##...::::::: ##::::::: ##.:::: + ##.... ##:::: ##:::::::: ##:: ##::: ##:: ##::::::: ##:::::::::: ##:::::::..:::::: + ##:::: ##:::: ##:::::::'####:. ######::: ########: ########:::: ##:::::::'##::::: + ..:::::..:::::..::::::::....:::......::::........::........:::::..::::::::..:::::: + + Adapted from code originally from this fantastic repository: https://github.com/nycynik/ascii-font-processor Thank you nycynik for a fantastic headstart @@ -16,24 +34,65 @@ import pyfiglet This demo has an interesting little trick. If the window is resized, then it will use the new size of the Multiline element to compute the numiber of characters wide the Multiline has to work with. This number is passed to the figlet renderer. + + ____________________________________ + ______ + / / , , + ---/------/__-------__-----------__- + / / ) / (_ ` / (_ ` + _/______/___/_/___(__)_____/___(__)_ + + + ___________________________________________________________ + _____ __ __ _ _____ ______ + / ' / / ) / / ' / + ----__-------/__--------/----/--------/------/__------/---- + / ) / / / --, / / / + _(___(_____/________ _/_ __(____/___/____/_/____ ___/______ + + + Copyright 2021 PySimpleGUI """ +DEFAULT_FONT = 'nancyj-fancy' + +def change_theme(location): + layout = [[sg.Text(f'Current theme {sg.theme()}')], + [sg.Listbox(values=sg.theme_list(), size=(20, 20), key='-LIST-', enable_events=True)], + [sg.OK(), sg.Cancel()]] + + window = sg.Window('Look and Feel Browser', layout, location=location, keep_on_top=True) + while True: # Event Loop + event, values = window.read() + if event in (sg.WIN_CLOSED, 'Exit', 'OK', 'Cancel'): + break + window.close() + + if event == 'OK' and values['-LIST-']: + sg.theme(values['-LIST-'][0]) + sg.user_settings_set_entry('-theme-', values['-LIST-'][0]) + return values['-LIST-'][0] + return None + + + def draw_text(font, text, width=80): """Simple wrapper for the main draw function""" return pyfiglet.Figlet(font=font, width=width).renderText(text) -def main(): - selected_font = 'computer' +def make_window(): + selected_font = DEFAULT_FONT LINE_LENGTH = 100 MULTILINE_FONT = ('Courier', 12) fonts = pyfiglet.FigletFont.getFonts() + sg.theme_background_color(sg.theme_input_background_color()) + sg.theme_text_element_background_color(sg.theme_input_background_color()) column_left = [[sg.Table(headings=['Font Name'], values=fonts, key='-FONT-LIST-', col_widths=[40], num_rows=30, enable_events=True), sg.VerticalSeparator(pad=((5, 5), 0))]] - try: mline_input = sg.Multiline('PySimpleGUI', size=(40,3), key='-TEXT-TO-SHOW-', no_scrollbar=True, enable_events=True, focus=True) except Exception as e: @@ -41,15 +100,27 @@ def main(): column_right = [[sg.Text("Font Name:", size=(10,1)), sg.Input(selected_font, size=(12,1), key='-FONT-NAME-')], [sg.Text("Text:", size=(10,1)), mline_input, sg.T('Font size for display below'), sg.Combo(list(range(4,20)), 12, enable_events=True, k='-FONT-SIZE-')], - [sg.Multiline(size=(LINE_LENGTH, 20), key='-OUTPUT-', font=MULTILINE_FONT)],] + [sg.Multiline(size=(LINE_LENGTH, 20), key='-OUTPUT-', border_width=0, font=MULTILINE_FONT, expand_x=True, expand_y=True, pad=(40,40), )], + [sg.B('Copy to Clipboard'), sg.B('Change Theme')],] - layout = [[sg.Column(column_left), sg.Column(column_right, expand_x=True, expand_y=True)], - [sg.Button('Exit'), sg.T('PySimpleGUI ver ' + sg.version.split(' ')[0] + ' tkinter ver ' + sg.tclversion_detailed + ' Python ver ' + sys.version, font='Default 8', pad=(0,0))],] + layout = [[sg.Column(column_left, expand_y=False, expand_x=False), sg.Column(column_right, expand_x=False, expand_y=False,k='-COL R-')], + [sg.Button('Exit', right_click_menu=sg.MENU_RIGHT_CLICK_DISABLED), sg.T('PySimpleGUI ver ' + sg.version.split(' ')[0] + ' tkinter ver ' + sg.tclversion_detailed + ' Python ver ' + sys.version, font='Default 8', pad=(0,0))],] + layout[-1].append(sg.Sizegrip()) - window = sg.Window('Figlet-Me', layout, resizable=True, finalize=True, right_click_menu=['_', ['Edit Me']]) + window = sg.Window('psg-figlet', layout, resizable=True, finalize=True, right_click_menu=['_', ['Edit Me', 'Copy', 'Exit']], icon=icon) - window['-OUTPUT-'].expand(True, True, expand_row=True) + window['-COL R-'].expand(True, True, True) + # window['-OUTPUT-'].expand(True, True, False) + # window['-FONT-LIST-'].expand(False, False, False) window['-OUTPUT-'].update(draw_text(selected_font, 'PySimpleGUI').strip()) + return window + +def main(): + window = make_window() + selected_font = DEFAULT_FONT + LINE_LENGTH = 100 + MULTILINE_FONT = ('Courier', 12) + fonts = pyfiglet.FigletFont.getFonts() while True: # Event Loop event, values = window.read() @@ -74,8 +145,20 @@ def main(): # line_length = window["-OUTPUT-"].get_size()[0] // sg.Text.char_width_in_pixels(MULTILINE_FONT) line_length = window["-OUTPUT-"].get_size()[0] // sg.tkinter.font.Font(font=MULTILINE_FONT).measure('A') window['-OUTPUT-'].update(draw_text(selected_font, text, line_length).rstrip()) - + if event.startswith('Copy'): + sg.clipboard_set(window['-OUTPUT-'].get()) + elif event == 'Change Theme': + if change_theme(window.current_location()): + window.close() + window = make_window() window.close() if __name__ == "__main__": + # sg.theme('Dark red') + sg.theme(sg.user_settings_get_entry('-theme-', sg.theme())) + # sg.theme('Dark Gray 13') + # sg.theme_input_background_color('#36393F') + # sg.theme_background_color('#36393F') + # sg.theme_input_text_color('white') + 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==' main() \ No newline at end of file