Create a Simple Python Text Editor!

41,419

15

17

In this Instructable I will be teaching you how to create a simple text editor with Python and the module Tkinter.

To do this tutorial you need some basic knowledge of Python.

First create a python file called texteditor.py or something like that. Then open it with a text editor like Atom or Notepad ++.

Step 1: Making a Window

To make a text editor we need a window. Type in the file:

import sys
v=sys.python_version
if "2.7" in v:
from Tkinter import *
elif "3.3" in v or "3.4" in v:
from tkinter import *
root=Tk("Text Editor")
root.mainloop()

Then if you are on a mac go Cmd+Shift - search and open "terminal" - then type

python /pathto/texteditor.py 

and hit enter.

If you are on a windows, search and open Command prompt, type

python /pathto/texteditor.py

and hit enter. You should se a screen that looks like the picture above.

Congrats!

Step 2: Add a Text Widget

Now we need to add something to type in.

Underneath root=Tk() add two lines like this:

text=Text(root)
text.grid()

Then run the file again like in step one. You should get a bigger screen with a text box in it when you click on it. It will look like the picture above.

Your full code will look like this now:

import sys
v=sys.version()
if "2.7" in v: 
    from Tkinter import * 
elif "3.3" in v or "3.4" in v:
    from tkinter import * 
root=Tk("Text Editor")
text=Text(root)
text.grid()
root.mainloop()

Step 3: Saving Your Text

You need to be able to save your text of course, so we will add a button to save.

Under import Tkinter add

import tkFileDialog

and under import tkinter add

import tkinter.tkFileDialog

Under the last line you added write this:

def saveas():
    global text  
    t = text.get("1.0", "end-1c")
    savelocation=tkFileDialog.asksaveasfilename()
    file1=open(savelocation, "w+")
    file1.write(t)
    file1.close()
button=Button(root, text="Save", command=saveas) 
button.grid()

Clicking on the button will save your file.

The full code:

import sys
v=sys.version()
if "2.7" in v:
    from Tkinter import * 
    import tkFileDialog
elif "3.3" in v or "3.4" in v: 
    from tkinter import *
    import tkinter.tkFileDialog
root=Tk("Text Editor")

text=Text(root)
text.grid()
def saveas():
    global text
    t = text.get("1.0", "end-1c")
    savelocation=tkFileDialog.asksaveasfilename()
    file1=open(savelocation, "w+")
    file1.write(t)
    file1.close()
button=Button(root, text="Save", command=saveas)
button.grid() 
root.mainloop()

Step 4: Font Changer

Under the last line you added, add this:

def FontHelvetica():

global text
    text.config(font="Helvetica")
def FontCourier():
    global text
    text.config(font="Courier")
font=Menubutton(root, text="Font") 
font.grid() 
font.menu=Menu(font, tearoff=0) 
font["menu"]=font.menu
helvetica=IntVar() 
courier=IntVar()
font.menu.add_checkbutton(label="Courier", variable=courier,
command=FontCourier)
font.menu.add_checkbutton(label="Helvetica", variable=helvetica,
command=FontHelvetica)

Congratulations! You have finished a very simple text editor. If you want more tutorials like this tell me what here.

Run the file to use it!

Full Code:

import sys

v=sys.version()
if "2.7" in v:
    from Tkinter import * 
    import tkFileDialog
elif "3.3" in v or "3.4" in v:
    from tkinter import *
    import tkinter.tkFileDialog
root=Tk("Text Editor")
text=Text(root)
text.grid() 
def saveas():

global text

t = text.get("1.0", "end-1c")

savelocation=tkFileDialog.asksaveasfilename()

file1=open(savelocation, "w+")

file1.write(t)

file1.close()
button=Button(root, text="Save", command=saveas) 
button.grid()
def FontHelvetica():

global text

text.config(font="Helvetica")
def FontCourier():

global text

text.config(font="Courier")
font=Menubutton(root, text="Font") 
font.grid() 
font.menu=Menu(font, tearoff=0) 
font["menu"]=font.menu
Helvetica=IntVar() 
arial=IntVar() 
times=IntVar() 
Courier=IntVar()
font.menu.add_checkbutton(label="Courier", variable=Courier, 
command=FontCourier)
font.menu.add_checkbutton(label="Helvetica", variable=helvetica,
command=FontHelvetica)
root.mainloop()

Share

    Recommendations

    • DIY Summer Camp Contest

      DIY Summer Camp Contest
    • Planter Challenge

      Planter Challenge
    • Paint Challenge

      Paint Challenge

    17 Discussions

    0
    None
    Ben4jammin2

    22 days ago

    Great tut. I just wanted to comment that yes I would like very much to see more of these. And for a question, I am interested in offering the collapsibility feature to such a text editor.

    0
    None
    KonstantinosA16

    6 months ago

    That was really helpful. Just one thing. Is there a way to change the fonts just for the text you are going to insert and not the one that already exists?

    0
    None
    vungtau

    Question 7 months ago on Introduction

    how could I type in vietnamese inside the editor, your instruction for the editor is working very well with Python 2.7. Thanks much for giving us the very good code for the Editor.
    Thanks.

    0
    None
    Dimlu

    9 months ago

    This whole thing is broken for python 3. I will say, this is a great learning tool for an intro into this. Here's what I got:

    import os

    from tkinter import *

    import tkinter.filedialog

    from tkinter.filedialog import askopenfilename

    root=Tk("Text Editor")

    text=Text(root)

    text.grid()

    def saveas():

    global text

    t = text.get("1.0", "end-1c")

    savelocation=tkFileDialog.asksaveasfilename()

    file1=open(savelocation, "w+")

    file1.write(t)

    file1.close()

    button=Button(root, text="Save", command=saveas)

    button.grid()

    def FontHelvetica():

    global text

    text.config(font="Helvetica")

    def FontCourier():

    global text

    text.config(font="Courier")

    font=Menubutton(root, text="Font")

    font.grid()

    font.menu=Menu(font, tearoff=0)

    font["menu"]=font.menu

    Helvetica=IntVar()

    arial=IntVar()

    times=IntVar()

    Courier=IntVar()

    font.menu.add_checkbutton(label="Courier", variable=Courier,

    command=FontCourier)

    font.menu.add_checkbutton(label="Helvetica", variable=Helvetica,

    command=FontHelvetica)

    root.mainloop()

    1 reply
    0
    None
    MasonK22Dimlu

    Reply 8 months ago

    This code works for python 3 with absolutely no problem.

    0
    None
    MasonK22

    8 months ago

    There are some bugs, I am in python 3.
    The first thing is that line 4,
    v=sys.version()
    sys.version is an string and not a function that will return a string
    also the command to run the program and make the window is for mac only.
    I hope this answered all these questions.
    If my answers don't make sense I'm sorry I'm an newbie to tkinter

    0
    None
    Ineedaname87

    1 year ago

    When I run that command in the terminal at the start to make the window, it comes up with this. python: can't open file ' /pathto/texteditor.py': [Errno 2] No such file or directory.

    PLS HELP! I am running this on windows 7. I have installed Python 3.6.5 and I'm using the Atom text editor.

    0
    None
    akhildabraal

    Question 1 year ago on Step 2

    Hi Sir/Mam,

    I was checking out your code can you tell me how can I add a check box in front of the text box as I am planning to make it as a ToDo List Application.

    0
    None
    aruba246

    Question 1 year ago on Step 2

    What does this error mean?? And,how do i overcome it?

    str.png
    0
    None
    mcovic

    1 year ago

    Can you make a tutorial that teaches how to add syntax highlighting? (For IDE's)

    0
    None
    CarsenE

    3 years ago

    Why does mine say "error in line 4" "v = sys.version()" "'str' Object not callable"

    3 replies
    0
    None
    krowley1CarsenE

    Reply 2 years ago

    Because sys.version is a property and not a method. It should read:

    v=sys.version

    without the (). Possibly the author was thinking of platform.python_version() which is a method that prints the same information (if you include platform).

    This is a nice little tutorial, but that error should be corrected...

    0
    None
    krowley1krowley1

    Reply 2 years ago

    Also, font.menu.add_checkbutton for Helvetica has the variable name in lower case (variable=helvetica), but this gives an error as the font name was earlier defined and should start with a cap:

    variable=Helvetica

    or, you could change the definition to: helvetica=IntVar()

    fix those two errors (sys.version and Helvetica) and it should run.

    0
    None
    PumpkinSmasherkrowley1

    Reply 2 years ago

    thanks, sorry been completely inactive for a year and this was written when I was still learning myself. Will fix now.