Membuat Aplikasi Kasir Sederhana dengan Python dan PySimpleGUI

tutorial lengkap cara membuat aplikasi kasir sederhana menggunakan Python dan PySimpleGUI, lengkap dengan penjelasan step by step dari layout hingga script penuh

python

Pernahkah kalian ingin membuat aplikasi kasir sederhana menggunakan Python? Dengan library PySimpleGUI, kita bisa membuat antarmuka pengguna yang fungsional dengan cepat dan mudah. Di postingan ini, saya akan berbagi cara membangun aplikasi kasir yang memungkinkan pengguna memasukkan item, harga, dan jumlah, lalu menampilkan hasilnya dalam tabel lengkap dengan total transaksi.


Apa Itu PySimpleGUI?

PySimpleGUI adalah library Python yang memudahkan pembuatan antarmuka pengguna grafis (GUI) tanpa kerumitan yang biasanya muncul saat menggunakan tkinter, Qt, atau wx secara langsung. Konsepnya sederhana: cukup definisikan layout menggunakan list of lists, dan PySimpleGUI akan merender jendela aplikasi untuk kalian.

Bayangkan PySimpleGUI seperti blueprint rumah. Kalian mendefinisikan di mana setiap elemen berada—tombol, input, tabel—dan library ini yang akan "membangun" tampilannya. Hasilnya adalah aplikasi desktop yang siap pakai tanpa ratusan baris kode boilerplate.

Mengapa Cocok untuk Aplikasi Kasir?

  • Ringan dan cepat: Tidak membutuhkan setup rumit
  • Mudah dikustomisasi: Warna, ukuran, dan layout fleksibel
  • Tabel bawaan: Mendukung komponen tabel yang sangat cocok untuk menampilkan daftar transaksi
  • Cross-platform: Berjalan di Windows, macOS, dan Linux

Mengapa Aplikasi Kasir Penting dalam Belajar Python?

Membangun aplikasi kasir adalah latihan yang sangat baik karena beberapa alasan fundamental:

1. Menggabungkan Banyak Konsep Sekaligus

Proyek ini mengajarkan input/output, event handling, manipulasi string, formatting angka, dan pembaruan UI secara dinamis—semua dalam satu proyek nyata.

2. Relevan dengan Dunia Nyata

Berbeda dengan latihan teori, aplikasi kasir langsung bisa digunakan di kehidupan sehari-hari seperti warung, toko kecil, atau bazar.

3. Fondasi untuk Proyek Lebih Besar

Konsep yang dipelajari di sini—seperti menyimpan data dalam list, memformat mata uang, dan memperbarui komponen UI—adalah fondasi untuk aplikasi yang lebih kompleks.

4. Membangun Kepercayaan Diri

Melihat aplikasi kita berjalan dengan GUI yang nyata memberikan kepuasan tersendiri dan motivasi untuk belajar lebih jauh.


Komponen Utama Aplikasi Kasir Ini

1. Form Input

Terdiri dari tiga field utama yang perlu diisi pengguna:

  • Item: Nama barang yang dijual
  • Harga: Harga satuan dalam format angka
  • Jumlah: Berapa unit barang yang dibeli

2. Tabel Transaksi

Menampilkan semua item yang sudah dimasukkan dengan kolom: Item, Harga, Jumlah, dan Total per item.

3. Kalkulasi Total Otomatis

Setiap kali item baru ditambahkan, total keseluruhan transaksi diperbarui secara otomatis.

4. Validasi Input

Aplikasi akan menampilkan pesan error jika ada field yang belum diisi sebelum menekan tombol "Tambah".


Contoh Nyata: Alur Penggunaan Aplikasi

Simulasi Transaksi di Warung

Bayangkan kalian menjalankan warung dan ada pelanggan yang membeli:

Langkah-langkah Penggunaan:

Step 1: Masukkan Item Pertama

Pengguna mengisi form:

Item  : Nasi Goreng
Harga : 15000
Jumlah: 2

Klik tombol Tambah → tabel menampilkan baris baru, total otomatis terupdate.

Step 2: Masukkan Item Berikutnya

Item  : Es Teh
Harga : 5000
Jumlah: 3

Klik Tambah → tabel sekarang memiliki dua baris, total diakumulasi.

Step 3: Lihat Total

Di bagian bawah aplikasi, total semua transaksi ditampilkan dalam format Rupiah:

Total: Rp. 45,000.00

Step 4: Transaksi Selesai

Ketika semua item sudah dimasukkan, kasir bisa melihat ringkasan lengkap di tabel dan memberikan informasi total kepada pelanggan.

Hasil: Aplikasi kasir sederhana yang fungsional dan mudah digunakan tanpa perlu koneksi internet atau database rumit.


Tutorial: Membuat Aplikasi Kasir Step by Step

1. Import Library

Pertama, pastikan PySimpleGUI sudah terinstall (pip install PySimpleGUI), lalu import:

import PySimpleGUI as sg

2. Buat Fungsi Layout untuk Input Data

def create_layout():
    layout = [
        [sg.Text('Item'), sg.InputText(key='item', size=(20, 1)), sg.Text('Harga'),  
        sg.InputText(key='harga', size=(10, 1)), sg.Text('Jumlah'),
        sg.InputText(key='jumlah', size=(10, 1))],
        [sg.Button('Tambah'), sg.Button('Keluar')],
        [sg.Table(values=[], headings=['Item', 'Harga', 'Jumlah', 'Total'],
        auto_size_columns=False, justification='center', num_rows=10, key='table',  
        col_widths=[20, 12, 10, 12], text_color='black', background_color='white')],
        [sg.Text('Total:', size=(20, 1)), sg.Text('', size=(20, 1), key='total_text')],
    ]
    return layout

3. Buat Fungsi untuk Memasukkan Data dan Logika Utama

def show_error_popup(message):
    sg.popup_error(message, title='Error')

def main():
    sg.theme('Default1')

    window = sg.Window('Aplikasi Kasir', create_layout())

    data = []

    while True:
        event, values = window.read()

        if event == sg.WIN_CLOSED or event == 'Keluar':
            break
        elif event == 'Tambah':
            item = values['item']
            harga = values['harga']
            jumlah = values['jumlah']

            # Periksa apakah semua kolom input sudah diisi
            if not all([item, harga, jumlah]):
                show_error_popup('Data belum diinput. Harap isi semua kolom.')
                continue

            harga = float(harga)
            jumlah = int(jumlah)
            total = harga * jumlah

            harga_formatted = f'Rp. {harga:,.2f}'
            total_formatted = f'Rp. {total:,.2f}'

            data.append([item, harga_formatted, str(jumlah), total_formatted])

            window['table'].update(values=data)

            total_semua = sum([float(row[3][3:].replace(',', '')) for row in data])
            window['total_text'].update(f'Total: Rp. {total_semua:,.2f}')

            window['item'].update('')
            window['harga'].update('')
            window['jumlah'].update('')

    window.close()

4. Tambahkan Entry Point Aplikasi

if __name__ == '__main__':
    main()

5. Script Lengkap Aplikasi Kasir

import PySimpleGUI as sg

def create_layout():
    layout = [
        [sg.Text('Item'), sg.InputText(key='item', size=(20, 1)), sg.Text('Harga'),  
        sg.InputText(key='harga', size=(10, 1)), sg.Text('Jumlah'),
        sg.InputText(key='jumlah', size=(10, 1))],
        [sg.Button('Tambah'), sg.Button('Keluar')],
        [sg.Table(values=[], headings=['Item', 'Harga', 'Jumlah', 'Total'],
        auto_size_columns=False, justification='center', num_rows=10, key='table',  
        col_widths=[20, 12, 10, 12], text_color='black', background_color='white')],
        [sg.Text('Total:', size=(20, 1)), sg.Text('', size=(20, 1), key='total_text')],
    ]
    return layout   

def show_error_popup(message):
    sg.popup_error(message, title='Error')

def main():
    sg.theme('Default1')

    window = sg.Window('Aplikasi Kasir', create_layout())

    data = []

    while True:
        event, values = window.read()

        if event == sg.WIN_CLOSED or event == 'Keluar':
            break
        elif event == 'Tambah':
            item = values['item']
            harga = values['harga']
            jumlah = values['jumlah']

            # Periksa apakah semua kolom input sudah diisi
            if not all([item, harga, jumlah]):
                show_error_popup('Data belum diinput. Harap isi semua kolom.')
                continue

            harga = float(harga)
            jumlah = int(jumlah)
            total = harga * jumlah

            harga_formatted = f'Rp. {harga:,.2f}'
            total_formatted = f'Rp. {total:,.2f}'

            data.append([item, harga_formatted, str(jumlah), total_formatted])

            window['table'].update(values=data)

            total_semua = sum([float(row[3][3:].replace(',', '')) for row in data])
            window['total_text'].update(f'Total: Rp. {total_semua:,.2f}')

            window['item'].update('')
            window['harga'].update('')
            window['jumlah'].update('')

    window.close()

if __name__ == '__main__':
    main()

Keterbatasan dan Tantangan Aplikasi Ini

Keterbatasan Teknis:

  1. Data tidak tersimpan permanen: Ketika aplikasi ditutup, semua data transaksi hilang karena belum ada fitur save ke file atau database
  2. Tidak ada fitur hapus item: Jika salah memasukkan data, pengguna tidak bisa menghapus baris tertentu di tabel
  3. Validasi terbatas: Belum ada validasi format (misalnya jika pengguna memasukkan huruf di field harga)
  4. Tidak ada fitur cetak struk: Belum bisa menghasilkan struk dalam format PDF atau print langsung

Tantangan Pengembangan:

  1. Kompatibilitas versi: PySimpleGUI sempat berubah model lisensinya, pastikan menggunakan versi yang tepat
  2. Styling terbatas: Kustomisasi tampilan lebih dalam membutuhkan pengetahuan tentang tkinter
  3. Skalabilitas: Untuk toko dengan ratusan item, perlu diintegrasikan dengan database seperti SQLite

Langkah Pengembangan Selanjutnya:

  • Tambahkan fitur simpan ke CSV agar data transaksi bisa diarsipkan
  • Integrasikan dengan database SQLite untuk penyimpanan permanen
  • Tambahkan fitur hapus item dari tabel
  • Buat fitur cetak struk dalam format teks atau PDF
  • Tambahkan autentikasi untuk keamanan data kasir

Melindungi dan Mengembangkan Proyek Ini

Untuk Developer yang Ingin Berkontribusi:

Jika kalian ingin mengembangkan proyek ini lebih jauh, berikut beberapa tips:

Langkah-langkah Pengembangan:

  • Pisahkan logika bisnis dari kode UI untuk kode yang lebih bersih
  • Tambahkan unit test untuk fungsi kalkulasi harga
  • Gunakan version control (Git) sejak awal proyek
  • Dokumentasikan setiap fungsi dengan docstring yang jelas
  • Pertimbangkan migrasi ke framework GUI yang lebih modern seperti CustomTkinter atau Flet

Tools yang Direkomendasikan:

  • VS Code: Editor kode dengan dukungan Python yang sangat baik
  • PyCharm: IDE khusus Python dengan fitur debugging canggih
  • Black: Auto-formatter untuk menjaga konsistensi kode
  • SQLite Browser: Untuk mengelola database jika sudah diintegrasikan

Kesimpulan

Aplikasi kasir sederhana ini adalah contoh nyata bagaimana Python dan PySimpleGUI bisa dengan cepat menghasilkan aplikasi desktop yang fungsional dan siap pakai. Hanya dengan beberapa puluh baris kode, kita sudah memiliki aplikasi dengan GUI, tabel dinamis, validasi input, dan kalkulasi otomatis.

Namun penting untuk diingat bahwa ini adalah titik awal, bukan produk akhir. Gunakan proyek ini sebagai fondasi untuk belajar lebih dalam—coba tambahkan fitur baru, perbaiki tampilan, atau integrasikan dengan database untuk membangun sesuatu yang lebih powerful.

Kekuatan sesungguhnya dari Python terletak pada ekosistem library yang kaya dan kemudahan membaca kodenya, yang kemudian bisa dikombinasikan dengan kreativitas kalian untuk membangun aplikasi nyata yang berguna bagi orang lain.

Di era digital saat ini, kemampuan membuat aplikasi sederhana bukan hanya penting bagi developer profesional, tetapi juga bagi siapa saja yang ingin memecahkan masalah sehari-hari dengan teknologi.


Pro tip: Script ini dapat disesuaikan dengan kebutuhan kalian. Ubah tata letak, warna, atau tambahkan fitur sesuai keinginan. Jika ada pertanyaan atau saran, jangan ragu untuk meninggalkan komentar!

Stay curious, stay creative, dan selalu ingat bahwa setiap aplikasi besar dimulai dari proyek kecil seperti ini.

Share this post: