New Figlet Demo
This commit is contained in:
parent
1d662e5530
commit
8336c444c3
|
@ -0,0 +1,82 @@
|
|||
import PySimpleGUI as sg
|
||||
import sys
|
||||
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
|
||||
|
||||
If you are running PySimpleGUI before verion 4.35.0.11, then you'll get an error
|
||||
message saying there is a problem with: bound method Multiline.__del__
|
||||
It's because a newer parm is used in this code. It'll all still work just fine with this error.
|
||||
|
||||
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
|
||||
"""
|
||||
|
||||
|
||||
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'
|
||||
LINE_LENGTH = 100
|
||||
MULTILINE_FONT = ('Courier', 12)
|
||||
fonts = pyfiglet.FigletFont.getFonts()
|
||||
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-', scrollbar=False, enable_events=True, focus=True)
|
||||
except:
|
||||
mline_input = sg.Multiline('PySimpleGUI', size=(40,3), key='-TEXT-TO-SHOW-', enable_events=True, focus=True)
|
||||
|
||||
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)],]
|
||||
|
||||
layout = [[sg.Column(column_left), sg.Column(column_right, expand_x=True, expand_y=True)],
|
||||
[sg.Output(visible=False)],
|
||||
[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))],]
|
||||
|
||||
window = sg.Window('Figlet-Me', layout, resizable=True, finalize=True, right_click_menu=['_', ['Edit Me']])
|
||||
|
||||
window['-OUTPUT-'].expand(True, True, expand_row=True)
|
||||
window['-OUTPUT-'].update(draw_text(selected_font, 'PySimpleGUI').strip())
|
||||
|
||||
while True: # Event Loop
|
||||
event, values = window.read()
|
||||
print(event,values)
|
||||
if event == sg.WIN_CLOSED or event == 'Exit':
|
||||
break
|
||||
if event == '-FONT-SIZE-':
|
||||
MULTILINE_FONT = (MULTILINE_FONT[0], values['-FONT-SIZE-'])
|
||||
window['-OUTPUT-'].update(font=MULTILINE_FONT)
|
||||
window.refresh()
|
||||
elif event == '-FONT-LIST-':
|
||||
# first one is the selected, no multi-select allowed.
|
||||
selected_font = fonts[values['-FONT-LIST-'][0]]
|
||||
window['-FONT-NAME-'].update(selected_font)
|
||||
elif event == 'Edit Me':
|
||||
sg.execute_editor(__file__)
|
||||
if event in ('Show', '-TEXT-TO-SHOW-', '-FONT-SIZE-', '-FONT-LIST-'):
|
||||
text = values['-TEXT-TO-SHOW-']
|
||||
if text.strip() == '':
|
||||
text = selected_font.strip()
|
||||
# fancy way of detecting the size of the multiline so the window can be resized
|
||||
# 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())
|
||||
|
||||
window.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue