Pendahuluan
Dalam proyek kali ini, akan membahas tentang bagaimana cara membuat kalkulator sederhana menggunakan bahasa pemrograman Python dan Tkinter untuk antarmuka pengguna grafis (GUI). Proyek ini saya buat untuk keperluan dokumentasi pekerjaan saya dan sebagai latihan dalam memahami dasar-dasar pembuatan aplikasi GUI dengan Python. Kalkulator ini memiliki fitur dasar seperti penjumlahan, pengurangan, perkalian, dan pembagian, serta fungsi lanjutan seperti akar kuadrat, pangkat, logaritma, dan fungsi trigonometri.
Tujuan Proyek:
- Memahami Pembuatan GUI dengan Tkinter: Tkinter adalah pustaka standar Python untuk membuat aplikasi desktop berbasis GUI. Dalam proyek ini, saya memanfaatkan Tkinter untuk merancang antarmuka kalkulator yang sederhana namun fungsional.
- Penggunaan Fungsi Matematika: Kalkulator ini tidak hanya menangani operasi dasar, tetapi juga fungsi matematika lanjutan seperti akar kuadrat, logaritma, dan fungsi trigonometri. Ini memberikan kesempatan untuk mempraktikkan penggunaan pustaka matematika di Python.
- Validasi Input: Salah satu tantangan dalam proyek ini adalah memastikan bahwa input pengguna valid. Saya menggunakan validasi untuk membatasi karakter yang dapat dimasukkan ke dalam kalkulator.
Proyek ini adalah latihan yang sangat baik untuk pemula yang ingin meningkatkan keterampilan pemrograman Python mereka dan memahami bagaimana membangun aplikasi GUI dengan pustaka Tkinter.
Untuk melihat dan mengunduh kode sumber kalkulator ini, kunjungi repositori GitHub saya.
Persyaratan
Sebelum memulai, pastikan Anda memiliki:
- Python 3.x: Versi terbaru dari Python, yang dapat diunduh dari python.org.
- Pustaka Tkinter: Tkinter biasanya sudah termasuk dalam instalasi Python. Jika belum terinstal, Anda dapat menginstalnya melalui manajer paket Python seperti
pip
.
Instalasi
Untuk menjalankan kalkulator ini, ikuti langkah-langkah berikut:
- Clone repositori ke mesin lokal Anda:
git clone https://github.com/JessicaAurelClarista/python-calculator.git
- Navigasi ke direktori proyek:
cd python-calculator
- Jalankan skrip Python:
python kalkulator.py
Keterangan Kode
1. Mengimpor Pustaka
import tkinter as tk # Mengimpor pustaka Tkinter untuk membuat GUI
from math import sqrt, sin, cos, tan, log # Mengimpor fungsi matematika yang akan digunakan
- Tkinter: Pustaka standar Python untuk membuat antarmuka grafis. Di sini, kita menggunakan Tkinter untuk merancang antarmuka kalkulator.
- math: Modul Python yang menyediakan fungsi matematika seperti akar kuadrat (
sqrt
), sinus (sin
), kosinus (cos
), tangen (tan
), dan logaritma (log
).
2. Kelas Calculator
class Calculator:
def __init__(self, root):
self.root = root
self.root.title("Kalkulator Python") # Menetapkan judul jendela
self.expression = "" # Menyimpan ekspresi matematika yang sedang dibangun
__init__
: Konstruktor kelas yang menyiapkan jendela aplikasi dan menginisialisasi variabelexpression
untuk menyimpan ekspresi matematika.
3. Membuat Widget Entry
self.entry = tk.Entry(root, width=40, borderwidth=5, font=('Arial', 14), justify='right')
self.entry.grid(row=0, column=0, columnspan=5, padx=10, pady=10)
self.entry.bind("<Key>", self.validate_keypress) # Mengikat fungsi validasi ke input keyboard
- Entry Widget: Komponen GUI untuk menampilkan ekspresi matematika dan hasil perhitungan.
bind("<Key>", self.validate_keypress)
: Menghubungkan event keypress ke fungsivalidate_keypress
untuk memastikan input yang dimasukkan valid.
4. Membuat Tombol
button_labels = [
'7', '8', '9', '/', 'C', # Baris pertama tombol
'4', '5', '6', '*', 'sqrt', # Baris kedua tombol
'1', '2', '3', '-', '^', # Baris ketiga tombol
'0', '.', '=', '+', 'log', # Baris keempat tombol
'(', ')', 'sin', 'cos', 'tan', # Baris kelima tombol
'DEL' # Tombol hapus satu karakter
]
button_labels
: Daftar label untuk setiap tombol pada kalkulator. Ini mencakup tombol untuk operasi dasar dan lanjutan.
row = 1 # Baris awal untuk penempatan tombol
col = 0 # Kolom awal untuk penempatan tombol
for label in button_labels:
button = tk.Button(root, text=label, padx=20, pady=20, font=('Arial', 12))
if label not in ['C', '=', 'sqrt', 'log', 'sin', 'cos', 'tan', 'DEL']:
button.config(command=lambda l=label: self.on_button_click(l)) # Mengatur fungsi tombol biasa
elif label == 'C':
button.config(command=self.on_clear) # Fungsi tombol Clear
elif label == '=':
button.config(command=self.on_equal) # Fungsi tombol sama dengan
elif label == 'DEL':
button.config(command=self.on_backspace) # Fungsi tombol Backspace
else:
button.config(command=lambda l=label: self.on_function_click(l)) # Fungsi tombol fungsi matematika khusus
button.grid(row=row, column=col, padx=5, pady=5, sticky='nsew') # Menempatkan tombol di grid
col += 1
if col > 4: # Pindah ke baris berikutnya jika kolom melebihi 4
col = 0
row += 1
- Membuat dan Menempatkan Tombol: Tombol-tombol ditambahkan ke grid dan dikonfigurasi dengan fungsi yang sesuai. Tombol-tombol khusus seperti
C
,=
danDEL
memiliki fungsi spesifik yang terikat padanya.
5. Fungsi Validasi Input
def validate_keypress(self, event):
valid_keys = "0123456789+-*/().^" # Karakter yang diizinkan
if event.char in valid_keys:
return True # Mengizinkan karakter yang valid
elif event.keysym in ('Return', 'BackSpace'):
return True # Mengizinkan tombol Enter dan BackSpace
else:
return "break" # Menghentikan input karakter yang tidak valid
validate_keypress
: Memastikan hanya karakter yang valid yang dapat dimasukkan ke dalam entry widget.
6. Fungsi Tombol
def on_button_click(self, char):
self.expression += str(char) # Menambahkan karakter ke ekspresi
self.entry.delete(0, tk.END) # Menghapus isi entry
self.entry.insert(tk.END, self.expression) # Menampilkan ekspresi yang diperbarui
on_button_click
: Menambahkan karakter ke ekspresi dan memperbarui tampilan entry widget.
def on_function_click(self, func):
if func == 'sqrt':
self.expression += 'sqrt(' # Menambahkan 'sqrt(' ke ekspresi
elif func == 'log':
self.expression += 'log(' # Menambahkan 'log(' ke ekspresi
elif func == 'sin':
self.expression += 'sin(' # Menambahkan 'sin(' ke ekspresi
elif func == 'cos':
self.expression += 'cos(' # Menambahkan 'cos(' ke ekspresi
elif func == 'tan':
self.expression += 'tan(' # Menambahkan 'tan(' ke ekspresi
self.entry.delete(0, tk.END) # Menghapus isi entry
self.entry.insert(tk.END, self.expression) # Menampilkan ekspresi yang diperbarui
on_function_click
: Menambahkan fungsi matematika khusus (sepertisqrt
,log
,sin
,cos
,tan
) ke ekspresi.
def on_clear(self):
self.expression = "" # Mengosongkan ekspresi
self.entry.delete(0, tk.END) # Menghapus isi entry
on_clear
: Menghapus seluruh ekspresi yang sedang dibangun.
def on_backspace(self):
self.expression = self.expression[:-1] # Menghapus karakter terakhir dari ekspresi
self.entry.delete(0, tk.END) # Menghapus isi entry
self.entry.insert(tk.END, self.expression) # Menampilkan ekspresi yang diperbarui
on_backspace
: Menghapus karakter terakhir dari ekspresi.
def on_equal(self):
try:
self.expression = self.expression.replace('^', '**') # Mengganti '^' dengan '**' untuk eksponen
result = eval(self.expression) # Mengevaluasi ekspresi matematika
self.entry.delete(0, tk.END) # Menghapus isi entry
self.entry.insert(tk.END, str(result)) # Menampilkan hasil
self.expression = str(result) # Menyimpan hasil sebagai ekspresi baru
except Exception as e:
self.entry.delete(0, tk.END) # Menghapus isi entry
self.entry.insert(tk.END, "Error") # Menampilkan pesan error
self.expression = "" # Mengosongkan ekspresi
on_equal
: Mengevaluasi ekspresi matematika dan menampilkan hasil. Jika ada kesalahan dalam evaluasi, menampilkan pesan error.
7. Menjalankan Aplikasi
if __name__ == "__main__":
root = tk.Tk() # Membuat instance Tkinter
calculator = Calculator(root) # Membuat instance kalkulator
root.mainloop() # Memulai loop utama Tkinter
root.mainloop()
: Memulai loop utama Tkinter yang menjaga jendela aplikasi tetap terbuka dan responsif.
Kesimpulan
Dengan mengikuti panduan ini, Anda dapat membuat kalkulator sederhana menggunakan Python dan Tkinter. Proyek ini memberikan pemahaman dasar tentang pembuatan GUI dan penerapan fungsi matematika dalam aplikasi. Selamat mencoba, dan semoga Anda mendapatkan pengalaman berharga dari proyek ini!
Komentar
Posting Komentar