diff --git a/DemoPrograms/Demo_Unicode_Characters.py b/DemoPrograms/Demo_Unicode_Characters.py new file mode 100644 index 00000000..cc678831 --- /dev/null +++ b/DemoPrograms/Demo_Unicode_Characters.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python +import PySimpleGUI as sg +from random import randint as randint + +""" + To get a good display of the unicode characters visit https://en.wikipedia.org/wiki/List_of_Unicode_characters + You can directly copy and paste characters from the site into your strings. + Unicode characters make it possible to add simple graphics to your windows by using text. No Base64 required. They're plain chars. + They're good for a quick status display / dashboard, for use on buttons (arrows), or as "simple clipart" to name a few uses +""" + +sg.change_look_and_feel('Light Brown 4') + +SQUARE = '█' +CIRCLE = '⚫' +CIRCLE_OUTLINE = '◯' +UP = '▲' +RIGHT = '►' +DOWN = '▼' +LEFT = '◄' +ROAD = '⛖' + +layout = [ [sg.Text('Unicode Characters Demo', font='Def 16')], + [sg.T('Network Status', size=(12,1)), sg.Text(size=(10,1), font='Default 18', text_color='green', key='-OUT1-')], + [sg.T('Gas Level', size=(12,1)), sg.Text(size=(10,1), font='Default 18', text_color='green', key='-OUT2-')], + [sg.T('Oil Temp', size=(12,1)), sg.Text(size=(10,1), font='Default 18', text_color='blue', key='-OUT3-')], + [sg.T('Status4', size=(12,1)), sg.Text(CIRCLE, size=(10,1), font='Default 18', text_color='green', key='-OUT4-')], + [sg.T('Status5', size=(12,1)), sg.Text(CIRCLE_OUTLINE, size=(10,1), font='Default 18', text_color='green', key='-OUT5-')], + [sg.Frame('Unicode Converter', + [[sg.T('Enter a Number'), sg.In(size=(6,1), key='-NUM-'), sg.T('Unicode char: '), sg.I(size=(2,1), font='Any 18', key='-OUT CHAR-')], + [sg.T('Enter a Char'), sg.In(size=(2,1), key='-CHAR-', font='Any 18'), sg.T('Unicode number: '), sg.T(size=(6,1), key='-OUT NUM-')]])], + [sg.Frame('Display Unicode Characters In Range', + [[sg.T('Starting Number'), sg.In(size=(6, 1), key='-START-'), sg.T('Ending Number char: '), sg.I(size=(6, 1), key='-END-')], + [sg.B('Display Chars'), sg.T('Display Font Size'), sg.Spin(list(range(10,25)), initial_value=18, font='Any 14', key='-FONTSIZE-')], + ])], + [sg.Multiline(size=(30,10), font='Any 18',key='-MLINE-'+sg.WRITE_ONLY_KEY)], + [sg.B(UP),sg.B(UP), sg.B(DOWN), sg.B(LEFT), sg.B(RIGHT), sg.B('Exit')] ] + +window = sg.Window('Window Title', layout) + +i = j = 0 +multiline_font_size = 18 +while True: + event, values = window.read(timeout=200) + print(f'{event} - {values}') if event != sg.TIMEOUT_KEY else None + if event in (None, 'Exit'): # always, always give a way out! + break + elif event == RIGHT: + window['-OUT2-'](text_color='blue') + window['-OUT5-']((UP,DOWN,RIGHT,LEFT)[j%4]) + window['-OUT5-'](chr(ord(ROAD)+j)) + j = j +1 + elif event == LEFT: + window['-OUT2-'](text_color='yellow') + elif event == UP: + window['-OUT1-'](text_color='green') + window['-OUT3-'](text_color='green') + window['-OUT4-'](text_color='green') + elif event == DOWN: + window['-OUT1-'](text_color='red') + window['-OUT3-'](text_color='red') + window['-OUT4-'](text_color='red') + elif event.startswith('Display'): # process the dump range section + try: + for c in range(int(values['-START-']), int(values['-END-'])): + window['-MLINE-'+sg.WRITE_ONLY_KEY](chr(c), append=True) + window.refresh() + sg.popup_animated(sg.DEFAULT_BASE64_LOADING_GIF, 'Writing chars to display', text_color='red', font='Any 20', time_between_frames=100) + except: pass + sg.popup_animated(None) + + window['-OUT1-']('◯' if i % randint(1,3) else '⚫') + window['-OUT2-'](SQUARE * (i%10)) + window['-OUT3-'](SQUARE * (7-(i%8))) + + if multiline_font_size != int(values['-FONTSIZE-']): + window['-MLINE-'+sg.WRITE_ONLY_KEY](font='Any '+ str(values['-FONTSIZE-'])) + multiline_font_size = int(values['-FONTSIZE-']) + + if not i % 15: + window['-OUT1-'](text_color='red') + i += 1 + # Output stuff for Unicode Converter Section + try: + window['-OUT CHAR-'](chr(int(values['-NUM-']))) + except: pass + try: + window['-OUT NUM-'](ord(values['-CHAR-'])) + except: pass + +window.close()