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.
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.
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
- Mengimport modul Tkinter
- Membuat "bungkus" yaitu berupa jendela
- Membuat widgets pada jendela utama, dan menambahkan nomor pada widget.
- 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.
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
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
<CustButton@Button>:
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
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.