Skip to main content

Membuat Aplikasi Python Kalkulator

membuat aplikasi python kalkulator

Sambil belajar python, mari kita coba membuat program yang bermanfaat. Kita sudah memiliki bahasa pemrograman python yang merupakan alat hebat untuk digunakan bekerja pada hal yang berhubungan dengan angka. Sederhana saja, disini akan mencoba untuk membuat sebuah program kalkulator pyton. Saya akan mencobanya dengan berbagai cara, maksudnya adalah mencoba membuat program python ini mulai dari menggunakan CLI, GUI dengan beberapa toolkit python seperti Tkinter, QT, dan Kivy.

Back to top

1) Dasar Program Kalkulator Python

Sebelum mulai membuat program kalkukator python GUI, mari kita coba untuk membuat sebuah program dasar python terlebih dahulu.

def tambah(a,b):
    return a+b

def kurang(a,b):
    return a-b

def kali(a,b):
    return a*b

def bagi(a,b):
    return a/b

print("Pilih operator")
print("+")
print("-")
print("*")
print("/")

A = int(input('Angka pertama:'))
pilihan = input('Operator digunakan :')
B = int(input('Angka kedua:'))

if pilihan == '+':
    print(A,'+',B,'=', tambah(A,B))
elif pilihan == '-':
    print(A,'-',B,'=', kurang(A,B))
elif pilihan == '*':
    print(A,'*',B,'=', kali(A,B))
elif pilihan == '/':
    print(A,'/',B,'=', bagi(A,B))
else:
    print('Invalid input')

Diprogram ini, kita tidak menggunakan modul tambahan. Hanya fungsi dan percabangan serta operator aritmatika. Pada saat program dijalankan, user akan diminta untuk memasukkan angka pertama yang akan dihitung, kemudian memilih operator yang akan digunakan untuk perhitungan, dan terakhir user memasukkan angka kedua.

Setelah itu, program akan masuk ke percabangan if untuk memeriksa kondisi. Kondisi dipilih berdasarkan operator yang digunakan. Ketika sesuai, maka akan menampilkan hasilnya. Dan saat semua kondisi tidak ada yang sesuai, maka program akan menampilkan blok else.

Kamu bisa menambahkan operator lainnya, untuk mengembangkan program sederhana ini.

Penampakan program yang dijalankan.

python kalkulator dasar
Back to top

2) Membuat Program Python Dengan Tkinter

Setelah kita mengetahui dasar program kalkulator, agar lebih memudahkan pengguna program ini. Maka sekarang kita coba untuk membuatnya memiliki GUI, program ini agar bisa dijalankan dari lingkungan desktop.

Menggunakan Tkinter untuk membuat aplikasi GUI di Python, adalah cara yang mudah dan cepat. Karena tidak lagi menginstall modul, Tkinter merupakan modul yang sudah ada (bawaan) saat kita menginstall python (Mac dan Windows) untuk di Linux, menginstall paket berbeda yaitu python3-tk.

Untuk membuat aplikasi kalkulator python ini, kita akan melakukan tahapan

  1. Mengimport modul Tkinter
  2. Membuat "bungkus" yaitu berupa jendela
  3. Membuat widgets pada jendela utama, dan menambahkan nomor pada widget.
  4. Menerapkan trigger pada widget

Sekarang kita akan membuat program kalkulator menggunakan 4 (empat) operator artimatik dasar. Sepert yang kita gunakan pada bagian dasar tadi. Karena di sini kita menggunakan modul Tkinter, jadi programnya ada perubahan.

from tkinter import *

def MyCalc(source, side):
    sObj = Frame(source, borderwidth=4, bd=4, bg='powder blue')
    sObj.pack(side=side, expand=YES, fill=BOTH)
    return sObj

def tombol(source, side, text, command=None, bg='powder blue'):
    sObj = Button(source, text=text, command=command, bg=bg)
    sObj.pack(side=side, expand=YES, fill=BOTH)
    return sObj

class app(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.option_add('*Font', 'arial 20 bold')
        self.pack(expand=YES, fill=BOTH)
        self.master.title('Kalkulator')

        display = StringVar()
        Entry(self, relief=FLAT, textvariable=display, bd=30, bg='blue').pack(side=TOP, expand=YES, fill=BOTH)

        for TombAngka in ('789', '456', '123', '0.+', '/*-'):
            fNum = MyCalc(self, TOP)
            for isdm in TombAngka:
                tombol(fNum, LEFT, isdm, lambda sObj=display, q=isdm: sObj.set(sObj.get() + q))

        for TombolC in (['C']):
            ers = MyCalc(self, RIGHT)
            for ichar in TombolC:
                tombol(ers, RIGHT, ichar, lambda sObj=display, q=ichar: sObj.set(''), bg='red')
        
        SamaDengan = MyCalc(self, LEFT)
        for sd in '=':
            if sd == '=':
                TombolSama = tombol(SamaDengan, LEFT, sd)
                TombolSama.bind('<ButtonRelease-1>', lambda e,s=self, sObj=display: s.hitung(sObj), '+')
            else:
                TombolSama = tombol(SamaDengan, LEFT, sd, lambda sObj=display, s=' %s ' % sd: sObj.set(sObj.get()+s))
        
    def hitung(self, display):
        try:
            display.set(eval(display.get()))
        except:
            display.set('ERROR')

if __name__=='__main__':
    Tk.mainloop(app())

Referensi https://www.simplifiedpython.net/python-calculator/

Seperti biasa, kita akan melakukan import modul dalam hal ini adalah modul Tkinter dan semua yang ada didalamnya. Lalu membuat tampilan antarmuka atau jendela utama pada fungsi MyCalc. Setelah itu, membuat tampilan display widget display = StringVar() pada class app().

Membuat tombol angka dan simbol aritmatika dengan dengan cara loop for TombAngka in ('789', '456', '123', '0.+', '/*-'): pada sebuah tipe data tuple. Data ini kemudian dipotong-potong (slicing). Selanjutnya membuat tombol "C" untuk menghapus atau clear di area teks for TombolC in (['C']): dan tidak lupa juga membuat tombol sama dengan (=) SamaDengan = MyCalc(self, LEFT)

Bagian penting dalam aplikasi kalkulator ini, adalah fungsi hitung. Ini sesuai dengan namanya, yang bertugas untuk melakukan perhitungan ketika user mengklik sama dengan (=). Setelah aplikasi siap untuk dijalankan, gunakan method mainloop(). Mainloop() akan tetap melakukan proses dan menunggu event selama jendela aplikasi belum ditutup.

aplikasi kalkulator python tkinter
Back to top

3) Membuat Kalkulator Python dengan PyQT

Selain menggunakan Tkinter, kita juga coba membuat kalkulator menggunakan PyQT. Untuk membuat aplikasi kalkulator dengan PyQT5, ada sekitar 190 baris kode yang ditulis. Berbeda dengan menggunakan Tkinter, yang hanya mencapai 48 baris kode. Berikut ini kode yang digunakan

import re
import sys
from PyQt5.QtWidgets import QWidget,QPushButton,QLineEdit,QGridLayout,QMessageBox,QApplication
from PyQt5.QtCore import Qt,QSize
from PyQt5.QtGui import QFont
 
class Example(QWidget):
    def __init__(self):
        super().__init__()
 
        self.initUI()
 
        self.move(300,150)
        self.setWindowTitle("Calculator")
        self.show()
 
    def initUI(self):
 
        self.string = ''
        self.number = '0'
        self.out='0'
 
        grid = QGridLayout()
        self.display = QLineEdit('0')
 
        self.display.setFont(QFont("Times", 20)) # set font
        self.display.setReadOnly(True) # Set editable
        self.display.setAlignment(Qt.AlignRight) # Set the text position, set to the right here
        self.display.setMaxLength(50) # set the maximum length
        grid.addWidget(self.display, 0, 0, 1, 4)
 
        names = ['Clear', 'Del', '(', ')',
                '7', '8', '9', '/',
                '4', '5', '6', '*',
                '1', '2', '3', '-',
                '0', '.', '=', '+']
        pos = [(0, 0), (0, 1), (0, 2), (0, 3),
                (1, 0), (1, 1), (1, 2), (1, 3),
                (2, 0), (2, 1), (2, 2), (2, 3),
                (3, 0), (3, 1), (3, 2), (3, 3 ),
                (4, 0), (4, 1), (4, 2), (4, 3)]
 
        c = 0
        for name in names:
            button = QPushButton(name)
                         #Key size setting
            button.setFixedSize(QSize(60,30))
                         # Set signal/slot for each button
            button.clicked.connect(self.Calculator)
                         # Determine the position of the graphic button by calling the pos row
            grid.addWidget(button, pos[c][0]+1, pos[c][1])
            c=c+1
        self.setLayout(grid)
 
    def Calculator(self):
        text=self.sender().text()
        #print(text)
 
        if text=="Del":#Slice, press down one bit at a time
            self.string=self.number
            self.number=self.number[:-1]
 
        elif text=="Clear":#set 0
            self.number='0'
 
        elif text=="=":#If you enter the equal sign calculation
            print("Number string to be calculated", self.number)
            self.out=calculate(self.number)
            self.out=self.out[:12]
            self.number='0'
            print(self.out)
 
        else:#In other cases, accumulate characters
            if (self.number=='0'):
                self.number=''
            self.number=self.number+text
            print(self.number)
 
                 #Different displays under different conditions
        while self.number == '0' and self.out!='0':
            self.display.setText(self.out)
            break
        while self.number != '0' or text=='Clear':
            self.display.setText(self.number)
            break
 
    def closeEvent(self,event):
        reply=QMessageBox.question(self,"Message","Are you sure to quit?", QMessageBox.Yes,QMessageBox.No)
        if reply==QMessageBox.Yes:
            event.accept()
        else:
            event.ignore() 
 
def refresh_formula(formula):
    formula = formula.replace(" ","")
    formula = formula.replace("+-","-")
    formula = formula.replace("-+","-")
    formula = formula.replace("--","+")
    return formula 
 
def total_calc(formula):
 
    def devide(formula):
        """"""
        devidestr = re.search('\d+\.?\d*(\/-?\d+\.?\d*)+', formula)
        if devidestr is None:
            return formula
        devidenum = re.findall('-?\d+\.?\d*', devidestr.group())
        devidelist = []
        for i in devidenum:
            devidelist.append(float(i))
        res = devidelist[0]
        for i in range(1, len(devidelist)):
            res = res / devidelist[i]
        formula = re.sub('\d+\.?\d*(\/-?\d+\.?\d*)+', str(res), formula, 1)
        return formula
 
    def multiply(formula):
        """"""
        multiplystr = re.search('\d+\.?\d*(\*-?\d+\.?\d*)+', formula)
        if multiplystr is None:
            return formula
        multiplynum = re.findall(r'-?\d+\.?\d*', multiplystr.group())
        multiplylist = []
        res = 1
        for i in multiplynum:
            multiplylist.append(float(i))
        for i in range(len(multiplylist)):
            res = res * multiplylist[i]
        formula = re.sub(r'\d+\.?\d*(\*-?\d+\.?\d*)+', str(res), formula, 1)
        return formula
 
    formula = refresh_formula(formula)
    res = 0
    while True:
 
        if '*' in formula:
            mul = formula.split("*")
            #print("mul",mul)
            if '/' in mul[0]:
                formula = devide(formula)
                #print("devide",formula)
            else:
                formula = multiply(formula)
                #print("multiply",formula)
 
        elif '/' in formula:
            formula = devide(formula)
  
        elif'+' or'-' in formula:#addition and subtraction
            addminus = re.findall('-?\d+\.?\d*',formula)
            #print("addminus",addminus)
            res = 0
            for digit in addminus:
                res = res + float(digit)
            return str(res)
 
        else:
            return res
 
def bracket_calc(bracketstr):
    bracketstr = bracketstr.replace("\(","")
    bracketstr = bracketstr.replace("\)","")
    return total_calc(bracketstr)
 
def calculate(formula):
    while True:
                 #Operation priority search
        bracket = re.search("\(([^()]+)\)",formula)
        # print("formula",formula)
        # print("bracket",bracket)
        if bracket:
            bracket = bracket.group()
            #print("BRACK",bracket)
            res = bracket_calc(bracket)
            #print("()result is:%s" % res)
            formula = formula.replace(bracket,res)
        else:
            res = total_calc(formula)
            print("result is %s" % res)
            return res
 
if __name__=="__main__":
    app=QApplication(sys.argv)
    ex=Example()
    sys.exit(app.exec_())

Referensi https://blog.csdn.net/later_fall/article/details/77444204

Dan tampilannya seperti ini

Aplikasi kalkulator python PyQT
Back to top

4) Membuat Aplikasi Kalkulator Python dengan Kivy

Untuk membuat aplikasi dengan Kivy, pertama pastikan Kamu sudah menginstall kivy. Lalu menulis kode berikut:

import kivy
from kivy.app import App
kivy.require('1.11.0')

from kivy.uix.gridlayout import GridLayout
from kivy.config import Config
from kivy.uix.button import Button

Config.set('graphics', 'resizable', 1)

class CalcGridLayout(GridLayout):
    def calculate(self, calculation):
        if calculation:
            try:
                self.display.text = str(eval(calculation))
            except Exception:
                self.display.text = 'Error'

class CalculatorApp(App):
    def build(self):
         return CalcGridLayout()

if __name__ == "__main__":
    CalculatorApp().run()

Seperti yang sudah kita ketahui semua, kivy menggunakan dua bahasa. Untuk pemrograman logic menggunakan python, dan hal yang berkenaan dengan tata letak menggunakan kivy language. Dan kivy language disimpan dengan nama calculator.kv, kode programnya seperti ini

<[email protected]>:
    font_size: 32

<CalcGridLayout>:
    id: calculator
    display: entry
    rows: 6
    padding: 10
    spacing: 10

    BoxLayout:
        TextInput:
            id: entry
            font_size: 32
            multiline: False

    BoxLayout:
        spacing: 10
        CustButton:
            text: "7"
            on_press: entry.text += self.text
        CustButton:
            text: "8"
            on_press: entry.text += self.text
        CustButton:
            text: "9"
            on_press: entry.text += self.text
        CustButton:
            text: "*"
            on_press: entry.text += self.text

    BoxLayout:
        spacing: 10
        CustButton:
            text: "4"
            on_press: entry.text += self.text
        CustButton:
            text: "5"
            on_press: entry.text += self.text
        CustButton:
            text: "6"
            on_press: entry.text += self.text
        CustButton:
            text: "-"
            on_press: entry.text += self.text

    BoxLayout:
        spacing: 10
        CustButton:
            text: "1"
            on_press: entry.text += self.text
        CustButton:
            text: "2"
            on_press: entry.text += self.text
        CustButton:
            text: "3"
            on_press: entry.text += self.text
        CustButton:
            text: "+"
            on_press: entry.text += self.text

    BoxLayout:
        spacing: 10
        CustButton:
            text: "AC"
            on_press: entry.text = ""
        CustButton:
            text: "0"
            on_press: entry.text += self.text
        CustButton:
            text: "="
            on_press: calculator.calculate(entry.text)
        CustButton:
            text: "/"
            on_press: entry.text += self.text

    BoxLayout:
        CustButton:
            font_size: 20
            text: "Scientific Calculator"
            on_press: entry.text = ""

Dan ini adalah hasil dari program kivy, tapi belum diporting ke Android

aplikasi kalkulator python kivy
Back to top

5) Akhir Kata

Setelah kita mencoba membuat aplikasi kalkulator dengan menggunakan python pada berbagai toolkit, yaitu mode dasar tanpa modul, Tkinter, PyQT, dan Kivy. Kamu bisa membandingkan mana yang lebih mudah untuk digunakan.

Meski begitu, kamu juga tidak hanya mempertimbangkan berdasarkan kemudahan saja. Melainkan kedepannya aplikasi python ini akan digunakan untuk dimana. Apakah itu pada Desktop Linux, Windows, dan Mac, atau mungkin untuk digunakan pada perangkat seluler.

Kalau untuk perangkat seluler misalnya aplikasi android, maka pilihannya adalah menggunakan Kivy. Sementara modul lain lebih tepat digunakan untuk aplikasi desktop, karena semuanya cross platform.

Back to top