Texteditor Python Tkinter versi 3

BelajarPython - Assalamualaikum wr. wb.

Jumpa lagi sahabat python.. Pada kesempatan kali ini saya akan mengajak kalian untuk membuat mini aplikasi lagi nih.. Seperti apa? Langsung saja yuk di simak...

Pengenalan aplikasi yang akan kita buat.

Aplikasi yang kita buat kali ini adalah aplikasi text editor.. Dengan fungsi standart saja seperti pada aplikasi editor lain nya.. Ya seperti save, copy paste, undo, redo dan lain sebagainya.. Dan gak ada yang spesial sih.. hehe

Aplikasi ini saya posting dengan berbagai versi.. Dengan penambahan fitur di tiap versinya.. Jika kalian ingin melihat semua versi nya, KLIK DISINI ya...

Kali ini, saya akan memberikan versi ketiga. Dimana di versi ini saya menghadirkan fitur pencarian teks.

Rincian Lengkap Aplikasi TextEditor Tkinter Versi 3.0

Aplikasi ini menggunakan library Tkinter.. Jadi untuk menjalankannya, kalian tidak perlu install library tambahan.. Dan berikut rincian lengkap versi ini..

Nama: mn-TextEdit 3.0
Versi: 3.0 || selanjutnya.
Platform: Python 3.x  || Install.
Modul: Tkinter.
Baris Code: +-144 baris.
Penambahan: +-25  baris.
Terdiri dari: 1 class dan 15 metode.
Fitur: pencarian file.
Kelemahan: pencarian belum sempurna. Kadang ada bug.
syarat menjalankan: Python 3.x, dan editor teks / IDE.
Cara menjalankan: install python 3, copy paste code program pada editor/IDE, simpan dalam file python(ekstensi ‘.py’), lalu jalankan.

Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu.. sehingga, nantinya kita cukup klik dua kali saja untuk menjalankan aplikasi ini... tanpa perlu repot - repot membuka nya di IDLE atau IDE python.. nah seperti apa caranya? cukup mudah kok.. dan saya juga sudah membuatkan tutorialnya.. untuk kalian yang menggunakan windows, KALIAN BISA KLIK DISINI ya temen - temen.. atau jika pada link pertama terlalu rumit, KALIAN BISA MENCOBA CARA INI ya.... dan bagi pengguna linux ? tenang saja.. bisa juga kok membuat file executable nya.. untuk melihat tutorialnya, KALIAN BISA KLIK DISINI temen - temen...

Code program aplikasi Text Editor Tkinter versi 3.0

Nah lalu seperti apa code program versi ini ? Oke, Berikut saya berikan code program nya ya...

from tkinter import *
from tkinter import messagebox
from tkinter.filedialog   import asksaveasfilename
from tkinter import filedialog
import os
from tkinter.messagebox import askokcancel

class SimpleEditor(Frame):
    def __init__(self, parent=None, file=None):
        Frame.__init__(self, parent)
        self.frm = Frame(parent)
        self.frm.pack(fill=X)
        self.layoutKolom = Frame(root)
        self.buatJudul()
        parent.title('Text editor dengan copy paste - dari mn-belajarpython.blogspot.co.id')
        self.buatTombol()
        self.kolomTeksUtama()
        self.settext(text='',file=file)
        self.kolomTeks.config(font=('DejaVu Sans Mono', 10))
        self.indeks = 1.0
        self.buatCari()
        self.path = ''

    def buatTombol(self):
        Button(self.frm, text='Open',relief='flat',  command=self.bukaFile).pack(side=LEFT)
        Button(self.frm, text='Simpan',relief='flat',  command=self.perintahSimpan).pack(side=LEFT)
        Button(self.frm, text='Copy', relief='flat', command=self.perintahCopy).pack(side=LEFT)
        Button(self.frm, text='Cut', relief='flat',   command=self.perintahCut).pack(side=LEFT)
        Button(self.frm, text='Paste', relief='flat', command=self.perintahPaste).pack(side=LEFT)
        Button(self.frm, text='Cari', relief='flat', command=self.perintahFind).pack(side=LEFT)
        Button(self.frm, text='Keluar', relief='flat', command=self.perintahKeluar).pack(side=LEFT)

    def kolomTeksUtama(self):
        scroll = Scrollbar(self)
        kolomTeks = Text(self, relief=SUNKEN)
        scroll.config(command=kolomTeks.yview)
        kolomTeks.config(yscrollcommand=scroll.set)
        scroll.pack(side=RIGHT, fill=Y)
        kolomTeks.pack(side=LEFT, expand=YES, fill=BOTH)
        self.kolomTeks = kolomTeks
        self.pack(expand=YES, fill=BOTH)

    def perintahSimpan(self):
        print(self.path)
        if self.path:
            alltext = self.gettext()
            open(self.path, 'w').write(alltext)
            messagebox.showinfo('Berhasil', 'Selamat File telah tersimpan ! ')
        else:
            tipeFile = [('Text file', '*.txt'), ('Python file', '*asdf.py'), ('All files', '.*')]
            filename = asksaveasfilename(filetypes=(tipeFile), initialfile=self.kolomJudul.get())
            if filename:
                alltext = self.gettext()
                open(filename, 'w').write(alltext)
                self.path = filename

    def perintahCopy(self):
        try:
            text = self.kolomTeks.get(SEL_FIRST, SEL_LAST)
            self.clipboard_clear()
            self.clipboard_append(text)
            self.kolomTeks.selection_clear()
        except:
            pass
    def perintahCut(self):
        try:
            text = self.kolomTeks.get(SEL_FIRST, SEL_LAST)
            self.kolomTeks.delete(SEL_FIRST, SEL_LAST)
            self.clipboard_clear()
            self.clipboard_append(text)
        except:
            pass
    def perintahPaste(self):
        try:
            text = self.selection_get(selection='CLIPBOARD')
            self.kolomTeks.insert(INSERT, text)
        except TclError:
            pass

    def perintahFind(self):
        target = self.kolomCari.get()
        if target:
            self.indeks = self.kolomTeks.search(target, str(float(self.indeks)+0.1), stopindex=END)
            if self.indeks:
                pastit = self.indeks + ('+%dc' % len(target))
                self.kolomTeks.tag_remove(SEL, '1.0', END)
                self.kolomTeks.tag_add(SEL, self.indeks, pastit)
                self.kolomTeks.mark_set(INSERT, pastit)
                self.kolomTeks.see(INSERT)
                self.kolomTeks.focus()
            else:
                self.indeks = '0.9'

    def perintahKeluar(self):
        ans = askokcancel('Keluar', "anda yakin ingin keluar?")
        if ans: Frame.quit(self)

    def settext(self, text='', file=None):
        if file:
            text = open(file, 'r').read()
        self.kolomTeks.delete('1.0', END)
        self.kolomTeks.insert('1.0', text)
        self.kolomTeks.mark_set(INSERT, '1.0')
        self.kolomTeks.focus()

    def gettext(self):
        return self.kolomTeks.get('1.0', END+'-1c')

    def buatJudul(self):
        self.layoutKolom.pack(fill=BOTH, expand=1, padx=17, pady=5)
        judul = Label(self.layoutKolom, text="Judul : ")
        judul.pack(side="left")
        self.kolomJudul = Entry(self.layoutKolom)
        self.kolomJudul.pack(side="left")

    def buatCari(self):
        Button(self.frm, text='Cari', command=self.perintahFind).pack(side="right")
        self.kolomCari = Entry(self.frm)
        self.kolomCari.pack(side="right")

    def bukaFile(self):
        extensiFile = [ ('All files', '*'), ('Text files', '*.txt'),('Python files', '*.py')]
        buka = filedialog.askopenfilename(filetypes = extensiFile)
        if buka != '':
            text = self.readFile(buka)
            if text:
                self.path = buka
                nama = os.path.basename(buka)
                self.kolomJudul.delete(0, END)
                self.kolomJudul.insert(END, nama)
                self.kolomTeks.delete('0.1',END)
                self.kolomTeks.insert(END, text)

    def readFile(self, filename):
        try:
            f = open(filename, "r")
            text = f.read()
            return text
        except:
            messagebox.showerror("Error!!","Maaf file tidak dapat dibuka ! :) \nsabar ya..")
            return None

root = Tk()
SimpleEditor(root)
mainloop()


Dan berikut contoh screenshoot dari mini aplikasi kali ini...


Penjelasan code program Aplikasi Text Editor Tkinter versi 3.0

Sekarang saya akan mencoba untuk menjelaskan code program yang sudah saya bagikan di atas tadi.. Agar kalian lebih mudah untuk memahaminya.. Oke, Langsung saja..
[NOTE : Teks berwarna MERAH pada penjelasan adalah Code tambahan yang tidak ada di versi sebelumnyaDan yang Berwarna BIRU akan di hapus di versi berikutnya. Jika Code berwarna MERAH dan komentar berwarna BIRU maka merupakan code baru dan akan di hapus di versi berikutnya]

from tkinter import *  //mengimport semua class tkinter
from tkinter import messagebox  //mengimport class messgebox dari tkinter
from tkinter.filedialog import asksaveasfilename  //mengimport ‘askopenfilename’ dari class ‘filedialog’ tkinter
from tkinter import filedialog  //mengimport class file dialog dari library tkinter
import os  //mengimport class python yaitu os
from tkinter.messagebox import askokcancel  //mengimport messegebox sebagi ‘askokcancel’

class SimpleEditor(Frame):  //membuat class ‘SImpleEditor’ dengan inheritence class ‘Frame’ (di tkinter)
    def __init__(self, parent=None, file=None):  //konstruktor class diatas
        Frame.__init__(self, parent)  //menjalankan construktor class ‘Frame’ (parent)
        self.layoutKolom = Frame(root)  //membuat farame pencarian
        self.frm = Frame(parent)  //membuat frame (tempat tombol/toolbar)
        self.frm.pack(fill=X)  //memasukkan frame ke window
        self.buatJudul()  //menjalankan metode ‘buatJudul’
        parent.title('Text editor dengan copy paste - dari mn-belajarpython.blogspot.co.id')  //mengubah judul
        self.buatTombol()  //menjalankan metode buatTombol
        self.kolomTeksUtama()  //menjalankan metode ‘kolomTeksUtama’
        self.settext(text='',file=file)  //memasukkan teks (kosongan)
        self.kolomTeks.config(font=('DejaVu Sans Mono', 10))  //mengatur jenis dan ukuran teks 
        self.indeks = 1.0  //inisialisasi variabel ‘indeks’ sebagai penentu lokasi pencarian
        self.buatCari() //menjalankan metode ‘buatCari’
        self.path = ''  //menampung path

    def buatTombol(self):  //metode ‘buatTombol’
        Button(self.frm, text='Open',relief='flat',  command=self.bukaFile).pack(side=LEFT)  //membuat tombol ‘Open’ yang menjalankan metode ‘bukaFile’ ketika di klik
        Button(self.frm, text='Simpan',relief='flat',  command=self.perintahSimpan).pack(side=LEFT)  //membuat tombol ‘Simpan’ yang menjalankan metode ‘perintahSImpan’ ketika di klik
        Button(self.frm, text='Copy', relief='flat', command=self.perintahCopy).pack(side=LEFT)    //membuat tombol ‘Copy’ yang menjalankan metode ‘perintahCopy’ ketika di klik
        Button(self.frm, text='Cut', relief='flat',   command=self.perintahCut).pack(side=LEFT)    //membuat tombol ‘Cut’ yang menjalankan metode ‘perintahCut’ ketika di klik
        Button(self.frm, text='Paste', relief='flat', command=self.perintahPaste).pack(side=LEFT)    //membuat tombol ‘Paste’ yang menjalankan metode ‘perintahPaste’ ketika di klik
        Button(self.frm, text='Keluar', relief='flat', command=self.perintahKeluar).pack(side=LEFT)     //membuat tombol ‘keluar’ yang menjalankan metode ‘perintahKeluar’ ketika di klik

    def kolomTeksUtama(self):  //metode ‘kolomTeksUtama’
        scroll = Scrollbar(self)  //membuat scrollbar
        kolomTeks = Text(self, relief=SUNKEN)  //membuat kolom teks utama (tempat teks)
        scroll.config(command=kolomTeks.yview)  //menghubungkan scrollbar ke kolom teks utama
        kolomTeks.config(yscrollcommand=scroll.set)  //menghubungkan teks utama dengan scrollbar
        scroll.pack(side=RIGHT, fill=Y)  //memasukkan scrollbar ke window
        kolomTeks.pack(side=LEFT, expand=YES, fill=BOTH)
        self.kolomTeks = kolomTeks  //menampung kolom teks utama
        self.pack(expand=YES, fill=BOTH)  //memasukkan kolom teks utama ke window


    def perintahSimpan(self):  //metode ‘perintahSImpan
        if self.path:  //memastikan path tidak kosong
            alltext = self.gettext()  //mendapatkan smua text
            open(self.path, 'w').write(alltext)  /menyimpan file
            messagebox.showinfo('Berhasil', 'Selamat File telah tersimpan ! ')  //menampilkan pesan berhasil
        else:
            tipeFile = [('Text file', '*.txt'),('Python file', '*.py'), ('All files', '.*')]  //membuka tipe yang di cari  di file dialog untuk menyimpan file
            filename = asksaveasfilename(filetypes=(tipeFile), initialfile=self.kolomJudul.get())  //menampilkan file dialog dan mendapatkan lokasi tempat menyimpan file yang di pilih user
            if filename:  //memastikan user menyimpan file (tidak klik cancel)
                alltext = self.gettext()  //mendapatkan semua teks
                open(filename, 'w').write(alltext)  //memasukkan teks ke dalam file (menjadi file)
                self.path = filename //untuk menampung path

    def perintahCopy(self):  //metode ‘perintahCopy’
        try:  //mencoba beberapa code program
            text = self.kolomTeks.get(SEL_FIRST, SEL_LAST)  //mendapatkan teks yang di select atau di blok
            self.clipboard_clear()  //membersihkan clip board
            self.clipboard_append(text)  //memasukkan teks ke klip board
            self.kolomTeks.selection_clear()  //membersihkan pemilihan teks
        except:  //jika terjadi error di code try
            pass   //tidak melakukan apa apa
    def perintahCut(self):  //metode ‘perintahCut’
        try:  //mencoba beberapa code program
            text = self.kolomTeks.get(SEL_FIRST, SEL_LAST)  //mendapatkan teks yang di select atau di blok
            self.kolomTeks.delete(SEL_FIRST, SEL_LAST)  //menghapus teks yang di select atau di blok
            self.clipboard_append(text)  //memasukkan teks ke klip board
            self.kolomTeks.selection_clear()  //membersihkan pemilihan teks
        except:  //jika terjadi error di code try
            pass   //tidak melakukan apa apa
    def perintahPaste(self):    //metode ‘perintahPaste’
        try:  //mencoba beberapa code program
            text = self.selection_get(selection='CLIPBOARD')  //mendapatkan teks di clipboard
            self.kolomTeks.insert(INSERT, text)  //memasukkan teks di clipboard ke kolom teks
        except TclError:  //jika terjadi error di try
            pass  //tidak melakukan apa apa

    def perintahFind(self):  //metode ‘perintahFind’
        target = self.kolomCari.get()  //mendapatkan teks dari kolom cari (teks yang akan di cari)
        if target:  //memastikan tidak kosong(teks yang akan di cari)
            self.indeks = self.kolomTeks.search(target, str(float(self.indeks)+0.1), stopindex=END)  //mencari file
            if self.indeks:  //memastikan tidak kosong
                pastit = self.indeks + ('+%dc' % len(target))  //mendapatkan jumlah karakter
                self.kolomTeks.tag_remove(SEL, '1.0', END)  //menghapus selection
                self.kolomTeks.tag_add(SEL, self.indeks, pastit)  //memilih teks yang di temukan
                self.kolomTeks.mark_set(INSERT, pastit)  //menandai teks yang di temukan
                self.kolomTeks.see(INSERT)  //mengrahkan ke teks yang ditemukan
                self.kolomTeks.focus()
            else:  //jika ‘self.indeks’ kosong
                self.indeks = '0.9'  //mengubah nilai ‘self.indeks’ menjadi 0.9

    def perintahKeluar(self):  //metode perintah keluar
        ans = askokcancel('Keluar', "anda yakin ingin keluar?")  //menampilkan kotak konfirmasi
        if ans: Frame.quit(self)  //menutup window jika user klik ok

    def settext(self, text='', file=None):  //metode settext
        if file:  //memastikan variabel parameter ‘file’ tidak kosong/None
            text = open(file, 'r').read()  //membaca isi file
        self.kolomTeks.delete('1.0', END)  //menghapus semua teks yang ada di kolom utama
        self.kolomTeks.insert('1.0', text)  //memasukkan teks (yang telah dibaca) ke klom utama
        self.kolomTeks.mark_set(INSERT, '1.0')  //memberikan tanda
        self.kolomTeks.focus()  //memfokuskan cursor ke kolom teks utama

    def gettext(self):  //metode getText
        return self.kolomTeks.get('1.0', END+'-1c')  //mendapatkan semua teks di klom utama

    def buatJudul(self):  //metode buatJudul
        top = Frame(root)  //membuat frame
        top.pack(fill=BOTH, expand=1, padx=17, pady=5)  //memasukkan frame ke window
        judul = Label(top, text="Judul : ") //membuat label judul
        judul.pack(side="left")  //memasukkan judul ke window
        self.kolomJudul = Entry(top)  //membuat kolom teks untuk judul
        self.kolomJudul.pack(side="left") //memasukkan kolom judul

    def buatCari(self):  //metode ‘buatCari’
        Button(self.frm, text='Cari', command=self.perintahFind).pack(side="right")  //membuat tombol ‘Cari’ yang akan menjalankan ‘perintahFind’ jika di klik
        self.kolomCari = Entry(self.frm) //membuat kolom teks
        self.kolomCari.pack(side="right")  //memasukkan kolom teks ke window

    def bukaFile(self):  //metode bukaFile
        extensiFile = [ ('All files', '*'), ('Text files', '*.txt'),('Python files', '*.py')]  //insialisasi tipe file
        buka = filedialog.askopenfilename(filetypes = extensiFile)  //membuka file dialog untuk memilih file untuk di buka 
        if buka != '':  //memastikan user memilih file
            text = self.readFile(buka)  //mendapatkan semua teks (menjalankan metode ‘readFIle’
            if text:    //memastikan ada teks
                self.path = buka  //menampung path
                nama = os.path.basename(buka)  //mendapatkan nama file
                self.kolomJudul.delete(0, END)  //menghapus semua teks di kolom judul
                self.kolomJudul.insert(END, nama)  //memasukkan nama file ke kolom judul
                self.kolomTeks.delete('0.1',END) //menghapus semua teks di kolom utama
                self.kolomTeks.insert(END, text)  //memasukkan teks yang telah di baca ke dalam kolom teks utama

    def readFile(self, filename):  //metode ‘readFile’
        try:  //mencoba beberapa code program
            f = open(filename, "r")  //membuka file 
            text = f.read()  //membaca teks di dalam file
            return text  //mengembalikan teks
        except:  //jika gagal membaca file
            messagebox.showerror("Error!!","Maaf file tidak dapat dibuka ! :) \nsabar ya..")  //menampilkan pesan dialog error
            return None  //mengembalikan None

root = Tk()  //menampilkan window Tkinter
SimpleEditor(root)  //menjalankan metode ‘SimpleEditor’

mainloop()  //agar window tidak langsung close saat di jalankan



Nah itu dia temen - temen penjelasan code programnya.. Mohon maaf apabila ada penjelasan yang kurang jelas, atau bahkan ada kekeliruan... Mohon kasi pembenaran atau pendapat kalian di kolom komentar ya... Biar kita bisa belajar bersama..

Oke terimakasih dan sampai di sini dulu ya... Jangan lupa untuk membaca versi yang lain... Biar ilmunya nambah.. Hehe.. Temikasih sekali lagi dan sekian...

Wassalamualaikum wr. wb.
Previous
Next Post »
Thanks for your comment