maroph icon

text_editor.py

maroph | PRO | 12/08/19 02:35:58 PM UTC | 0 ⭐ | 357 👁️ | Never ⏰ | []
Python |

3.71 KB

|

None

|

0 👍

/

0 👎

from guizero import App, Box, Combo, PushButton, Slider, Text, TextBox
from pathlib import Path
 
app_name = 'Simple Text Editor'
app_version = '1'
app_verdate = '08-DEC-2019'
app_version_string = app_name + ' v' + app_version + ' (' + app_verdate + ')'
 
app = App(title=app_version_string, bg='slategray', width=800, height=600)
 
folder = '.'
 
 
def get_folder():
    name = file_name_text_box.value
    if name is None:
        return '.'
    elif len(name) == 0:
        return '.'
    else:
        return Path(name).parent
 
 
def about_editor():
    app.info('About', app_version_string + "\nA simple Python guizero based text editor")
    return
 
 
def open_file():
    f = get_folder()
    name = app.select_file('Open file', folder=f, filetypes=[["Text files", "*.txt"], ["Markdown files", "*.md"]], save=False)
    if name is None:
        return
    if len(name) == 0:
        return
 
    try:
        with open(name, "r") as f:
            editor.value = f.read()
    except Exception as e:
        app.error('Read Error', 'Error in reading file: ' + str(e))
        return
 
    file_name_text_box.value= name
 
 
# function for writing files
def save_file():
    name = file_name_text_box.value
    if name is None:
        save_as_file()
        return
    if len(name) == 0:
        save_as_file()
        return
 
    try:
        with open(name, "w") as f:
            f.write(editor.value)
    except Exception as e:
        app.error('Write Error', 'Error in reading file: ' + str(e))
        return
 
 
def save_as_file():
    f = get_folder()
 
    name = app.select_file('Save file', folder=f, filetypes=[["Text files", "*.txt"], ["Markdown files", "*.md"]], save=True)
    if name is None:
        return
    if len(name) == 0:
        return
 
    try:
        with open(name, "w") as f:
            f.write(editor.value)
    except Exception as e:
        app.error('Write Error', 'Error in reading file: ' + str(e))
        return
 
    file_name_text_box.value = name
 
 
def new_file():
    file_name_text_box.value = ''
    editor.value = ''
 
 
def change_font():
    editor.font = font.value
 
 
def change_text_color():
    editor.text_color = text_color.value
 
 
def change_text_size():
    editor.text_size = size.value
    editor.resize(1, 1)
    editor.resize("fill", "fill")
 
 
file_controls = Box(app, width='fill')
file_name_label = Text(file_controls, text='File: ', align="left")
file_name_text_box = TextBox(file_controls, text='', width='fill', align="left", enabled=False)
file_name_text_box.bg = 'white'
about_button = PushButton(file_controls, text="About", align="right", command=about_editor)
save_as_button = PushButton(file_controls, text="Save as...", align="right", command=save_as_file)
save_button = PushButton(file_controls, text="Save", align="right", command=save_file)
open_button = PushButton(file_controls, text="Open...", align="right", command=open_file)
new_button = PushButton(file_controls, text="New", align="right", command=new_file)
 
preferences_controls = Box(app, align="top", width="fill", border=True)
font = Combo(preferences_controls, options=["Courier", "Times New Roman", "Verdana"], align="left", selected='Verdana', command=change_font)
size = Slider(preferences_controls,  align="left", command=change_text_size, start=10, end=18)
size.value = 10
text_color = Combo(preferences_controls, options=['black', 'blue', 'red', 'magenta', 'yellow'], align="left", selected='black', command=change_text_color)
 
editor = TextBox(app, multiline=True, height="fill", width="fill", scrollbar=True)
editor.bg = 'white'
editor.font = font.value
editor.text_size = size.value
editor.text_color = text_color.value
 
app.display()

Comments