Skip to main content

Membuat Aplikasi Desktop Dengan Python Tkinter

membuat aplikasi desktop dengan python tkinter

Melanjutkan belajar python bersama edikartono.com. Sesuai dengan judul, kita akan belajar membuat aplikasi desktop dengan python tkinter. Seperti yang sudah kita ketahui bersama, tkinter adalah pustaka buil-in dari python, yaitu library yang sudah termasuk dalam paket installasi python. Tapi kalau belum ada, misal pada beberapa distro linux tertentu maka kita bisa menginstallnya dengan perintah sudo apt-get install python3-tk (untuk distro debian dan turunannya).

Sebenarnya sampai menulis ini pun, saya belum punya ide mau membuat aplikasi desktop apa😁️😂️😂️ tapi tidak mengapa kita coba dulu belajar membuat tampilan windownya. Siapa tau dapat inspirasi ditengah jalan. Ya...beginilah salah satu cerita, saat belajar programming otodidak kadang suka kehabisan amunisi untuk belajar apa selanjutnya. Tapi setidaknya kita harus tetap semangat pada tujuan awal supaya bisa menguasai bahasa python.

Back to top

1) Persiapan Python Tkinter

Oke... saya sekarang sudah punya ide untuk membuat aplikasi desktop dengan python tkinter. Aplikasi ini mungkin sudah banyak, tapi tidak ada salahnya dicoba. Sekarang persiapkan kebutuhannya terlebih dahulu.

  • Python 3.x, saya disini menggunakan python 3.7.3
  • Pustaka tkinter, kalau belum diinstall terlebih dahulu
  • Teks Editor / IDE, Saya menggunakan VCode Studio

Setelah siap, pertama buat virtualenv ini optional saja, kalaupun tidak juga tidak mengapa. Hanya kebiasaan saya saja, untuk membuat virtualenv setiap mengerjakan proyek baru. Seletah itu buka teks editornya dan mulai mengetik kode ini.

Oh iya... saya belum memberi tau mau membuat apa...

Back to top

2) Membuat Aplikasi Desktop Dengan Python Tkinter

Saya akan membuat aplikasi teks editor sederhana menggunakan python dengan library tkinter. Dan sekarang menuju ke layar teks editor, menggunakan teks editor untuk membuat teks editor😂️🤣️

Buat file bernama TeksEditor.py kemudian isi dengan baris kode berikut ini

import tkinter as tkr
from tkinter import messagebox
from tkinter import filedialog
from tkinter.filedialog import asksaveasfilename

import os
from tkinter.messagebox import askokcancel

root = tkr.Tk()

Mengimport semua yang diperlukan untuk membuat teks editor. pada baris pertama import tkinter as tkr ini untuk membuat alias, berguna kalau males ngetik kode panjang-panjang, jadi kita nanti panggil dengan nama alias tkr bukan lagi memanggil dengan tkinter. Membuat alias ini boleh dilakukan boleh juga tidak, kalau tidak dibuat alias nanti memanggilnya dengan tkinter

Kemudian, membuat class bernama SimpleEditor dengan inherit ke Frame punya tkinter, yang dalam hal ini sudah dibuat alias jadi memanggilnya dengan tkr.Frame

Frame ini berfungsi untuk meletakkan tombol-tombol yang kita buat, selain itu juga kita dengan Frame kita bisa menentukan label dan mengatur jendela dengan ukuran tertentu.

class SimpleEditor(tkr.Frame):
    def __init__(self, parent=None, file=None):
        tkr.Frame.__init__(self, parent)
        self.frm = tkr.Frame(parent)
        self.frm.pack(fill=tkr.X)
        self.layoutKolom = tkr.Frame(root)
        self.buatNamaFile()
        parent.title("Text Editor by edikartono.com")
        self.buatTombol()
        self.kolomTeksUtama()
        self.indeks = 1.0
        self.path = ''

Sekarang kita akan membuat tombol berupa menu yang sering ditemui pada banyak aplikasi. Buat tiga tombol saja terlebih dahulu, selebihnya nanti bisa kita tambahkan kemudian. Dalam contoh ini saya membuat toolbar menggunakan self.frm.

Supaya tombol bekerja Open, Save, dan Exit. Kita memanggil fungsi dengan command=self.openFile dan seterusnya.

Kemudian kita akan mengatur tata letak tombol itu pada posisi sebelah kiri dengan .pack(side=tkr.LEFT.

    def buatTombol(self):
        tkr.Button(self.frm, text='Open', command=self.openFile).pack(side=tkr.LEFT)
        tkr.Button(self.frm, text='Save', command=self.perintahSimpan).pack(side=tkr.LEFT)
        tkr.Button(self.frm, text='Exit', command=self.perintahKeluar).pack(side=tkr.LEFT)

Fungsi ini kolomTeksUtama, wadah teks yang diketik (dibuat) dan menggunakan style SUNKEN pada bagian tempat mengetiknya. Kalian bisa menggunakan style lainnya seperti RAISED, GROOVE, RIDGE, atau FLAT. Pilih saja sesuai selera.

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

Perintah untuk menyimpan file yang sudah kita buat

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

Perintah untuk keluar dari aplikasi

    def perintahKeluar(self):
        ans = askokcancel('Exit', 'Anda yakin mau keluar?')
        if ans:
            tkr.Frame.quit(self)

    def settext(self, text='', file=None):
        if file:
            text = open(file, 'r').read()
        self.kolomTeks.delete('1.0', tkr.END)
        self.kolomTeks.insert('1.0', text)
        self.kolomTeks.mark_set(tkr.INSERT, '1.0')
        self.kolomTeks.focus()
    
    def gettext(self):
        return self.kolomTeks.get('1.0', tkr.END+'-1c')
    
    def buatNamaFile(self):
        self.layoutKolom.pack(fill=tkr.BOTH, expand=1, padx=17, pady=5)

Berikutnya perintah untuk membuka file, ekstensi file yang bisa dibuka semuanya. Ditentukan pada variabel ekstensiFile

Baca juga: Variabel Pada Python

    def openFile(self):
        ekstensiFile = [('All files', '*.*'), ('Text Files', '*.txt'), ('Python files', '*.py')]
        open = filedialog.askopenfilename(filetypes = ekstensiFile)
        if open != '':
            text = self.readFile(open)
            if text:
                self.path = open
                #nama = os.path.basename(open)
                self.kolomTeks.delete('0.1', tkr.END)
                self.kolomTeks.insert(tkr.END, text)

Setelah program berhasil membuka file, perlu dapat melakukan membaca file yang dibuka tadi dan mengembalikan teksnya ke kolomTeks

    def readFile(self, filename):
        try:
            f = open(filename, 'r')
            text = f.read()
            return text
        except:
            messagebox.showerror('Error!')
            return None

Kode terakhir untuk menampilkan aplikasi tkinter kita, dan tkr.mainloop() memiliki tugas untuk tetap menampilkan jendela aplikasi sampai kita memberikan perintah exit.

SimpleEditor(root)
tkr.mainloop()

Sampai disini kita bisa mencoba menjalankan programmnya, cobalah untuk membuka file dan menyimpannya, lalu klik tombol exit.

Baca Juga: Membuat Website Dengan Django 

Berikut ini full kodenya

import tkinter as tkr
from tkinter import messagebox
from tkinter import filedialog
from tkinter.filedialog import asksaveasfilename

import os
from tkinter.messagebox import askokcancel

root = tkr.Tk()

class SimpleEditor(tkr.Frame):
    def __init__(self, parent=None, file=None):
        tkr.Frame.__init__(self, parent)
        self.frm = tkr.Frame(parent)
        self.frm.pack(fill=tkr.X)
        self.layoutKolom = tkr.Frame(root)
        self.buatNamaFile()
        parent.title("Text Editor by edikartono.com")
        self.buatTombol()
        self.kolomTeksUtama()
        self.indeks = 1.0
        self.path = ''
    
    def buatTombol(self):
        tkr.Button(self.frm, text='Open', command=self.openFile).pack(side=tkr.LEFT)
        tkr.Button(self.frm, text='Save', command=self.perintahSimpan).pack(side=tkr.LEFT)
        tkr.Button(self.frm, text='Exit', command=self.perintahKeluar).pack(side=tkr.LEFT)
    
    def kolomTeksUtama(self):
        scroll = tkr.Scrollbar(self)
        kolomTeks = tkr.Text(self, relief=tkr.SUNKEN)
        scroll.config(command=kolomTeks.yview)
        kolomTeks.config(yscrollcommand=scroll.set)
        scroll.pack(side=tkr.RIGHT, fill=tkr.Y)
        kolomTeks.pack(side=tkr.LEFT, expand=tkr.YES, fill=tkr.BOTH)
        self.kolomTeks = kolomTeks
        self.pack(expand=tkr.YES, fill=tkr.BOTH)
    
    def perintahSimpan(self):
        print(self.path)
        if self.path:
            alltext = self.gettext()
            open(self.path, 'w').write(alltext)
            messagebox.showinfo('Berhasil', 'file telah disimpan')
        else:
            tipeFile = [('Text File', '*.txt'), ('Python file', '*.py'),('All files','.*')]
            filename = asksaveasfilename(filetypes=(tipeFile))
            if filename:
                alltext = self.gettext()
                open(filename, 'w').write(alltext)
                self.path = filename
    
    def perintahKeluar(self):
        ans = askokcancel('Exit', 'Anda yakin mau keluar?')
        if ans:
            tkr.Frame.quit(self)
    
    def settext(self, text='', file=None):
        if file:
            text = open(file, 'r').read()
        self.kolomTeks.delete('1.0', tkr.END)
        self.kolomTeks.insert('1.0', text)
        self.kolomTeks.mark_set(tkr.INSERT, '1.0')
        self.kolomTeks.focus()
    
    def gettext(self):
        return self.kolomTeks.get('1.0', tkr.END+'-1c')
    
    def buatNamaFile(self):
        self.layoutKolom.pack(fill=tkr.BOTH, expand=1, padx=17, pady=5)
    
    def openFile(self):
        ekstensiFile = [('All files', '*.*'), ('Text Files', '*.txt'), ('Python files', '*.py')]
        open = filedialog.askopenfilename(filetypes = ekstensiFile)
        if open != '':
            text = self.readFile(open)
            if text:
                self.path = open
                #nama = os.path.basename(open)
                self.kolomTeks.delete('0.1', tkr.END)
                self.kolomTeks.insert(tkr.END, text)

    def readFile(self, filename):
        try:
            f = open(filename, 'r')
            text = f.read()
            return text
        except:
            messagebox.showerror('Error!')
            return None

SimpleEditor(root)
tkr.mainloop()
Back to top

3) Penutup

Kita sudah membuat aplikasi desktop dengan python tkinter, program ini sangat sederhana belum ada fitur lain yang mungkin saja perlu ditambahkan. Mungkin Anda perlu menambahkan fitur lain yang dirasa cukup berguna pada aplikasi teks editor buatan kita ini.

Ok, selamat mencoba membuat aplikasi desktop dengan python tkinter, sementara Anda semua mencoba membuat aplikasi teks editor ini, saya akan mencoba untuk menambahkan beberapa fitur yang saya inginkan.

Back to top