Iklan Header

projects.co.id

Membuat Aplikasi Kalkulator Dengan Python Menggunakan Library PySide

Kalau pada postingan sebelumnya saya membagikan tutorial tentang cara membuat aplikasi kalkulator dengan java menggunakan netbeans IDE. Kali ini saya akan kembali membagikan source code untuk membuat aplikasi kalkulator lagi, namun yang berbeda disini menggunakan bahasa pemrograman python dengan memanfaatkan library pyside.

Bagi temen-temen yang sudah membaca postingan saya tentang cara membuat aplikasi kalkulator dengan java menggunakan netbeans IDE, pastinya sudah tau kan kalau kita bisa membuat desain kalkulatornya dengan cara drag and drop dari aset-aset yang telah disediakan oleh netbeans IDE.

Nah, jauh berbeda dengan java yang bisa drag and drop untuk membuat desain aplikasinya. Kali ini dengan menggunakan python kita akan membuat semuanya dengan coding alias full coding, baik itu desain maupun fungsional aplikasinya hehehe... lebih greget kan?

Namun sebenarnya kita juga bisa membuat desain aplikasi dengan cara drag and drop di python, yaitu dengan menggunakan aplikasi QtDesigner... Tapi tidak untuk kali ini, mungkin next post saya bagikan contoh aplikasi yang didesain menggunakan QtDesigner. Di tunggu ya... hehehe

Berikut source code untuk membuat aplikasi kalkulator dengan python menggunakan library pyside.

import math
from PySide import QtCore, QtGui

class Button(QtGui.QToolButton):
def __init__(self, text, parent=None):
super(Button, self).__init__(parent)

self.setSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Preferred)
self.setText(text)

def sizeHint(self):
size = super(Button, self).sizeHint()
size.setHeight(size.height() + 20)
size.setWidth(max(size.width(), size.height()))
return size


class Calculator(QtGui.QDialog):
NumDigitButtons = 10

def __init__(self, parent=None):
super(Calculator, self).__init__(parent)

self.pendingAdditiveOperator = ''
self.pendingMultiplicativeOperator = ''

self.sumInMemory = 0.0
self.sumSoFar = 0.0
self.factorSoFar = 0.0
self.waitingForOperand = True

self.display = QtGui.QLineEdit('0')
self.display.setReadOnly(True)
self.display.setAlignment(QtCore.Qt.AlignRight)
self.display.setMaxLength(15)

font = self.display.font()
font.setPointSize(font.pointSize() + 8)
self.display.setFont(font)

self.digitButtons = []

for i in range(Calculator.NumDigitButtons):
self.digitButtons.append(self.createButton(str(i),
self.digitClicked))

self.pointButton = self.createButton(".", self.pointClicked)
self.changeSignButton = self.createButton("\261",
self.changeSignClicked)

self.backspaceButton = self.createButton("Backspace",
self.backspaceClicked)
self.clearButton = self.createButton("Clear", self.clear)
self.clearAllButton = self.createButton("Clear All", self.clearAll)

self.clearMemoryButton = self.createButton("MC", self.clearMemory)
self.readMemoryButton = self.createButton("MR", self.readMemory)
self.setMemoryButton = self.createButton("MS", self.setMemory)
self.addToMemoryButton = self.createButton("M+", self.addToMemory)

self.divisionButton = self.createButton("\367",
self.multiplicativeOperatorClicked)
self.timesButton = self.createButton("\327",
self.multiplicativeOperatorClicked)
self.minusButton = self.createButton("-", self.additiveOperatorClicked)
self.plusButton = self.createButton("+", self.additiveOperatorClicked)

self.squareRootButton = self.createButton("Sqrt",
self.unaryOperatorClicked)
self.powerButton = self.createButton("x\262",
self.unaryOperatorClicked)
self.reciprocalButton = self.createButton("1/x",
self.unaryOperatorClicked)
self.equalButton = self.createButton("=", self.equalClicked)

mainLayout = QtGui.QGridLayout()
mainLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)

mainLayout.addWidget(self.display, 0, 0, 1, 6)
mainLayout.addWidget(self.backspaceButton, 1, 0, 1, 2)
mainLayout.addWidget(self.clearButton, 1, 2, 1, 2)
mainLayout.addWidget(self.clearAllButton, 1, 4, 1, 2)

mainLayout.addWidget(self.clearMemoryButton, 2, 0)
mainLayout.addWidget(self.readMemoryButton, 3, 0)
mainLayout.addWidget(self.setMemoryButton, 4, 0)
mainLayout.addWidget(self.addToMemoryButton, 5, 0)

for i in range(1, Calculator.NumDigitButtons):
row = ((9 - i) / 3) + 2
column = ((i - 1) % 3) + 1
mainLayout.addWidget(self.digitButtons[i], row, column)

mainLayout.addWidget(self.digitButtons[0], 5, 1)
mainLayout.addWidget(self.pointButton, 5, 2)
mainLayout.addWidget(self.changeSignButton, 5, 3)

mainLayout.addWidget(self.divisionButton, 2, 4)
mainLayout.addWidget(self.timesButton, 3, 4)
mainLayout.addWidget(self.minusButton, 4, 4)
mainLayout.addWidget(self.plusButton, 5, 4)

mainLayout.addWidget(self.squareRootButton, 2, 5)
mainLayout.addWidget(self.powerButton, 3, 5)
mainLayout.addWidget(self.reciprocalButton, 4, 5)
mainLayout.addWidget(self.equalButton, 5, 5)
self.setLayout(mainLayout)
self.setWindowTitle("Kalkulator | Programmer Bojonegoro")

def digitClicked(self):
clickedButton = self.sender()
digitValue = int(clickedButton.text())

if self.display.text() == '0' and digitValue == 0.0:
return

if self.waitingForOperand:
self.display.clear()
self.waitingForOperand = False

self.display.setText(self.display.text() + str(digitValue))

def unaryOperatorClicked(self):
clickedButton = self.sender()
clickedOperator = clickedButton.text()
operand = float(self.display.text())

if clickedOperator == "Sqrt":
if operand < 0.0:
self.abortOperation()
return

result = math.sqrt(operand)
elif clickedOperator == u"x\262":
result = math.pow(operand, 2.0)
elif clickedOperator == "1/x":
if operand == 0.0:
self.abortOperation()
return

result = 1.0 / operand

self.display.setText(str(result))
self.waitingForOperand = True

def additiveOperatorClicked(self):
clickedButton = self.sender()
clickedOperator = clickedButton.text()
operand = float(self.display.text())

if self.pendingMultiplicativeOperator:
if not self.calculate(operand, self.pendingMultiplicativeOperator):
self.abortOperation()
return

self.display.setText(str(self.factorSoFar))
operand = self.factorSoFar
self.factorSoFar = 0.0
self.pendingMultiplicativeOperator = ''

if self.pendingAdditiveOperator:
if not self.calculate(operand, self.pendingAdditiveOperator):
self.abortOperation()
return

self.display.setText(str(self.sumSoFar))
else:
self.sumSoFar = operand

self.pendingAdditiveOperator = clickedOperator
self.waitingForOperand = True

def multiplicativeOperatorClicked(self):
clickedButton = self.sender()
clickedOperator = clickedButton.text()
operand = float(self.display.text())

if self.pendingMultiplicativeOperator:
if not self.calculate(operand, self.pendingMultiplicativeOperator):
self.abortOperation()
return

self.display.setText(str(self.factorSoFar))
else:
self.factorSoFar = operand

self.pendingMultiplicativeOperator = clickedOperator
self.waitingForOperand = True

def equalClicked(self):
operand = float(self.display.text())

if self.pendingMultiplicativeOperator:
if not self.calculate(operand, self.pendingMultiplicativeOperator):
self.abortOperation()
return

operand = self.factorSoFar
self.factorSoFar = 0.0
self.pendingMultiplicativeOperator = ''

if self.pendingAdditiveOperator:
if not self.calculate(operand, self.pendingAdditiveOperator):
self.abortOperation()
return

self.pendingAdditiveOperator = ''
else:
self.sumSoFar = operand

self.display.setText(str(self.sumSoFar))
self.sumSoFar = 0.0
self.waitingForOperand = True

def pointClicked(self):
if self.waitingForOperand:
self.display.setText('0')

if "." not in self.display.text():
self.display.setText(self.display.text() + ".")

self.waitingForOperand = False

def changeSignClicked(self):
text = self.display.text()
value = float(text)

if value > 0.0:
text = "-" + text
elif value < 0.0:
text = text[1:]

self.display.setText(text)

def backspaceClicked(self):
if self.waitingForOperand:
return

text = self.display.text()[:-1]
if not text:
text = '0'
self.waitingForOperand = True

self.display.setText(text)

def clear(self):
if self.waitingForOperand:
return

self.display.setText('0')
self.waitingForOperand = True

def clearAll(self):
self.sumSoFar = 0.0
self.factorSoFar = 0.0
self.pendingAdditiveOperator = ''
self.pendingMultiplicativeOperator = ''
self.display.setText('0')
self.waitingForOperand = True

def clearMemory(self):
self.sumInMemory = 0.0

def readMemory(self):
self.display.setText(str(self.sumInMemory))
self.waitingForOperand = True

def setMemory(self):
self.equalClicked()
self.sumInMemory = float(self.display.text())

def addToMemory(self):
self.equalClicked()
self.sumInMemory += float(self.display.text())

def createButton(self, text, member):
button = Button(text)
button.clicked.connect(member)
return button

def abortOperation(self):
self.clearAll()
self.display.setText("####")

def calculate(self, rightOperand, pendingOperator):
if pendingOperator == "+":
self.sumSoFar += rightOperand
elif pendingOperator == "-":
self.sumSoFar -= rightOperand
elif pendingOperator == u"\327":
self.factorSoFar *= rightOperand
elif pendingOperator == u"\367":
if rightOperand == 0.0:
return False

self.factorSoFar /= rightOperand

return True


if __name__ == '__main__':

import sys

app = QtGui.QApplication(sys.argv)
calc = Calculator()
sys.exit(calc.exec_())

Screenshoot hasil running program

Membuat Aplikasi Kalkulator Dengan Python Menggunakan Library PySide

Alhamdulillah, itulah source code untuk membuat aplikasi kalkulator dengan python menggunakan library pyside.

Semoga bermanfaat dan menambah wawasan teman-teman semua

Terimakasih


Berlangganan update artikel terbaru via email:

0 Response to "Membuat Aplikasi Kalkulator Dengan Python Menggunakan Library PySide"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel