Esempio n. 1
0
class hesap_makinesi(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Hesap Makinesi")
        self.setFixedWidth(270)
        self.setFixedHeight(220)
        self.hesap = ""
        self.islemyapilmismi = ""
        self.tiklanmismi = ""
        self.dugmeler = [x for x in range(10)]
        self.islemler = [z for z in range(4)]
        self.islemler_metin = ["+", "-", "*", "/"]
        """ LAYOUT AYARLARI """
        self.ana = QVBoxLayout(self)
        self.lineedit = QHBoxLayout(self)
        self.bir_iki_uc_geri = QHBoxLayout(self)
        self.dort_bes_alti_sil = QHBoxLayout(self)
        self.yedi_sekiz_dokuz_enter = QHBoxLayout(self)
        self.arti_eksi_carp_bol = QHBoxLayout(self)
        self.sifirr = QHBoxLayout(self)
        self.kesirr = QHBoxLayout(self)

        self.ana.addLayout(self.lineedit)
        self.ana.addLayout(self.bir_iki_uc_geri)
        self.ana.addLayout(self.dort_bes_alti_sil)
        self.ana.addLayout(self.yedi_sekiz_dokuz_enter)
        self.ana.addLayout(self.arti_eksi_carp_bol)
        self.ana.addLayout(self.sifirr)
        self.ana.addLayout(self.kesirr)
        """BUTON AYARLARI"""
        """ Sayı Butonlarının Ayarları """
        for i in range(10):
            self.dugmeler[i] = QPushButton(self)
            self.dugmeler[i].setText(str(i))
            self.dugmeler[i].setShortcut(str(i))
            self.islev_ata(i)
        """ Sayı Butonlarının Yerleşimi"""
        self.sifirr.addWidget(self.dugmeler[0])
        self.bir_iki_uc_geri.addWidget(self.dugmeler[1])
        self.bir_iki_uc_geri.addWidget(self.dugmeler[2])
        self.bir_iki_uc_geri.addWidget(self.dugmeler[3])
        self.dort_bes_alti_sil.addWidget(self.dugmeler[4])
        self.dort_bes_alti_sil.addWidget(self.dugmeler[5])
        self.dort_bes_alti_sil.addWidget(self.dugmeler[6])
        self.yedi_sekiz_dokuz_enter.addWidget(self.dugmeler[7])
        self.yedi_sekiz_dokuz_enter.addWidget(self.dugmeler[8])
        self.yedi_sekiz_dokuz_enter.addWidget(self.dugmeler[9])
        """ İşlem Butonlarının Ayarları """
        for j in range(4):
            self.islemler[j] = QPushButton(self)
            self.islemler[j].setText(str(self.islemler_metin[j]))
            self.islemler[j].setShortcut(str(self.islemler_metin[j]))

        self.islemler[0].clicked.connect(self.toplama)
        self.islemler[1].clicked.connect(self.cikarma)
        self.islemler[2].clicked.connect(self.carpma)
        self.islemler[3].clicked.connect(self.bolme)
        """ İşlem Butonlarının Yerleşimi"""
        for ı in range(4):
            self.arti_eksi_carp_bol.addWidget(self.islemler[ı])
        """ Diğer Butonların Ayarları """
        self.ekran = QLineEdit(self)
        self.ekran.setReadOnly(True)

        self.geribtn = QPushButton(self)
        self.geribtn.setText("←")
        self.geribtn.setShortcut("Backspace")

        self.silbtn = QPushButton(self)
        self.silbtn.setText("C")
        self.silbtn.setShortcut("Del")

        self.sonucbtn = QPushButton(self)
        self.sonucbtn.setText("⏎")
        self.sonucbtn.setShortcut("Return")

        self.kesirbtn = QPushButton(self)
        self.kesirbtn.setText(".")
        self.kesirbtn.setShortcut(".")

        self.silbtn.clicked.connect(self.silme)
        self.geribtn.clicked.connect(self.geri)
        self.kesirbtn.clicked.connect(self.kesir)
        self.sonucbtn.clicked.connect(self.sonuc)
        """ Diğer Butonların Yerleşimi """
        self.lineedit.addWidget(self.ekran)
        self.bir_iki_uc_geri.addWidget(self.geribtn)
        self.dort_bes_alti_sil.addWidget(self.silbtn)
        self.yedi_sekiz_dokuz_enter.addWidget(self.sonucbtn)
        self.kesirr.addWidget(self.kesirbtn)

    """FONKSİYONLAR"""
    """ Sayı Fonksiyonları """

    def islev(self, rakam):
        if self.islemyapilmismi == "evet":
            self.ekran.setText("")
            self.ekran.setText(self.ekran.text() + rakam)
            self.islemyapilmismi = ""
        else:
            self.ekran.setText(self.ekran.text() + str(rakam))

    def islev_ata(self, sayi):
        self.dugmeler[sayi].clicked.connect(lambda: self.islev(str(sayi)))

    """ İslem Fonksiyonları """

    def toplama(self):
        self.hesap = "+"
        if self.ekran.text() == "":
            self.ekran.setText(str(self.ilksayi))
        self.ilksayi = float(self.ekran.text())
        self.ekran.setText("")
        self.tiklanmismi = "ikinci"

    def cikarma(self):
        self.hesap = "-"
        if self.ekran.text() == "":
            self.ekran.setText(str(self.ilksayi))
        self.ilksayi = float(self.ekran.text())
        self.ekran.setText("")
        self.tiklanmismi = "ikinci"

    def carpma(self):
        self.hesap = "*"
        if self.ekran.text() == "":
            self.ekran.setText(str(self.ilksayi))
        self.ilksayi = float(self.ekran.text())
        self.ekran.setText("")
        self.tiklanmismi = "ikinci"

    def bolme(self):
        self.hesap = "/"
        if self.ekran.text() == "":
            self.ekran.setText(str(self.ilksayi))
        self.ilksayi = float(self.ekran.text())
        self.ekran.setText("")
        self.tiklanmismi = "ikinci"

    """ Diğer Fonksiyonlar """

    def silme(self):
        self.ekran.clear()
        self.tiklanmismi = "silme"

    def geri(self):
        self.ekran.backspace()
        self.tiklanmismi = "geri"

    def kesir(self):
        if self.ekran.text() == "":
            self.ekran.setText("")
        elif self.islemyapilmismi == "evet":
            self.ekran.setText("")
            self.islemyapilmismi = ""
        else:
            if self.tiklanmismi == "evet":
                self.ekran.setText(self.ekran.text())
            elif self.tiklanmismi == "ikinci":
                self.ekran.setText(self.ekran.text() + ".")
                self.tiklanmismi = "evet"
            elif self.tiklanmismi == "silme":
                self.ekran.setText(self.ekran.text() + ".")
                self.tiklanmismi = "evet"
            elif self.tiklanmismi == "geri":
                self.ekran.setText(self.ekran.text() + ".")
                self.tiklanmismi = "evet"
            else:
                self.ekran.setText(self.ekran.text() + ".")
                self.tiklanmismi = "evet"

    """ Sonuc Fonksiyonu """

    def sonuc(self):
        if self.hesap == "":
            self.ekran.setText("İşlem Yapmadınız!")
        else:
            self.ikincisayi = float(self.ekran.text())
            if self.hesap == "+":
                self.islem = self.ilksayi + self.ikincisayi
                if self.islem == int(self.islem):
                    self.ekran.setText(str(int(self.islem)))
                elif self.islem == float(self.islem):
                    self.ekran.setText(str(float(self.islem)))
            elif self.hesap == "-":
                self.islem = self.ilksayi - self.ikincisayi
                if self.islem == int(self.islem):
                    self.ekran.setText(str(int(self.islem)))
                elif self.islem == float(self.islem):
                    self.ekran.setText(str(float(self.islem)))
            elif self.hesap == "*":
                self.islem = self.ilksayi * self.ikincisayi
                if self.islem == int(self.islem):
                    self.ekran.setText(str(int(self.islem)))
                elif self.islem == float(self.islem):
                    self.ekran.setText(str(float(self.islem)))
            elif self.hesap == "/":
                if self.ikincisayi == 0:
                    self.ekran.setText("HATA")
                else:
                    self.islem = self.ilksayi / self.ikincisayi
                    if self.islem == int(self.islem):
                        self.ekran.setText(str(int(self.islem)))
                    elif self.islem == float(self.islem):
                        self.ekran.setText(str(float(self.islem)))
        self.islemyapilmismi = "evet"
        self.tiklanmismi = ""
Esempio n. 2
0
class Main(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.initUI()

    def initUI(self):

        self.line = QLineEdit(self)
        self.line.move(5, 5)
        self.line.setReadOnly(True)
        self.line.setAlignment(Qt.AlignRight)
        self.line.resize(200, 25)

        zero = QPushButton("0", self)
        zero.move(10, 180)
        zero.resize(35, 30)

        one = QPushButton("1", self)
        one.move(10, 145)
        one.resize(35, 30)

        two = QPushButton("2", self)
        two.move(50, 145)
        two.resize(35, 30)

        three = QPushButton("3", self)
        three.move(90, 145)
        three.resize(35, 30)

        four = QPushButton("4", self)
        four.move(10, 110)
        four.resize(35, 30)

        five = QPushButton("5", self)
        five.move(50, 110)
        five.resize(35, 30)

        six = QPushButton("6", self)
        six.move(90, 110)
        six.resize(35, 30)

        seven = QPushButton("7", self)
        seven.move(10, 75)
        seven.resize(35, 30)

        eight = QPushButton("8", self)
        eight.move(50, 75)
        eight.resize(35, 30)

        nine = QPushButton("9", self)
        nine.move(90, 75)
        nine.resize(35, 30)

        switch = QPushButton("+/-", self)
        switch.move(50, 180)
        switch.resize(35, 30)
        switch.clicked.connect(self.Switch)

        point = QPushButton(".", self)
        point.move(90, 180)
        point.resize(35, 30)
        point.clicked.connect(self.pointClicked)

        div = QPushButton("/", self)
        div.move(130, 75)
        div.resize(35, 30)

        mult = QPushButton("*", self)
        mult.move(130, 110)
        mult.resize(35, 30)

        minus = QPushButton("-", self)
        minus.move(130, 145)
        minus.resize(35, 30)

        plus = QPushButton("+", self)
        plus.move(130, 180)
        plus.resize(35, 30)

        sqrt = QPushButton("√", self)
        sqrt.move(170, 75)
        sqrt.resize(35, 30)
        sqrt.clicked.connect(self.Sqrt)

        squared = QPushButton("x²", self)
        squared.move(170, 110)
        squared.resize(35, 30)
        squared.clicked.connect(self.Squared)

        equal = QPushButton("=", self)
        equal.move(170, 145)
        equal.resize(35, 65)
        equal.clicked.connect(self.Equal)

        c = QPushButton("C", self)
        c.move(145, 35)
        c.resize(60, 30)
        c.clicked.connect(self.C)

        ce = QPushButton("CE", self)
        ce.move(77, 35)
        ce.resize(60, 30)
        ce.clicked.connect(self.CE)

        back = QPushButton("Back", self)
        back.move(10, 35)
        back.resize(60, 30)
        back.clicked.connect(self.Back)

        nums = [zero, one, two, three, four, five, six, seven, eight, nine]

        ops = [back, c, ce, div, mult, minus, plus, equal]

        rest = [switch, squared, sqrt, point]

        for i in nums:
            i.setStyleSheet("color:blue;")
            i.clicked.connect(self.Nums)

        for i in ops:
            i.setStyleSheet("color:red;")

        for i in ops[3:7]:
            i.clicked.connect(self.Operator)

        # ---------Window settings --------------------------------

        self.setGeometry(300, 300, 210, 220)
        self.setFixedSize(210, 220)
        self.setWindowTitle("")
        self.setWindowIcon(QIcon(""))
        self.show()

    def Nums(self):
        global num
        global newNum
        global opVar

        sender = self.sender()

        newNum = int(sender.text())
        setNum = str(newNum)

        if opVar == False:
            self.line.setText(self.line.text() + setNum)

        else:
            self.line.setText(setNum)
            opVar = False

    def pointClicked(self):
        global opVar

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

    def Switch(self):
        global num

        try:
            num = int(self.line.text())

        except:
            num = float(self.line.text())

        num = num - num * 2

        numStr = str(num)

        self.line.setText(numStr)

    def Operator(self):
        global num
        global opVar
        global operator
        global sumIt

        sumIt += 1

        if sumIt > 1:
            self.Equal()

        num = self.line.text()

        sender = self.sender()

        operator = sender.text()

        opVar = True

    def Equal(self):
        global num
        global newNum
        global sumAll
        global operator
        global opVar
        global sumIt

        sumIt = 0

        newNum = self.line.text()

        print(num)
        print(newNum)
        print(operator)

        if operator == "+":
            sumAll = float(num) + float(newNum)

        elif operator == "-":
            sumAll = float(num) - float(newNum)

        elif operator == "/":
            sumAll = float(num) / float(newNum)

        elif operator == "*":
            sumAll = float(num) * float(newNum)

        print(sumAll)
        self.line.setText(str(sumAll))
        opVar = True

    def Back(self):
        self.line.backspace()

    def C(self):
        global newNum
        global sumAll
        global operator
        global num

        self.line.clear()

        num = 0.0
        newNum = 0.0
        sumAll = 0.0
        operator = ""

    def CE(self):
        self.line.clear()

    def Sqrt(self):
        global num

        num = float(self.line.text())
        n = sqrt(num)
        num = n

        self.line.setText(str(num))

    def Squared(self):
        global num

        num = float(self.line.text())

        n = num**2

        num = n

        self.line.setText(str(n))
Esempio n. 3
0
class Calculator(QWidget):
    """Calculator window class"""
    def __init__(self):
        super().__init__()

        self.history = []
        self.haveCalculationBeenDone = False
        self.haveBeenCleared = False
        self.initUI()

    def initUI(self):
        """ Initialises GUI for the calculator """
        minHeight = 0.53 * QDesktopWidget().availableGeometry().height()
        self.setMinimumHeight(minHeight)

        grid = QGridLayout()  # setuping the grid for the buttons and screen
        grid.setSpacing(1)
        grid.setContentsMargins(0, 0, 0, 0)
        ''' Setup of QLineEdit that is used as a screen for calculations and
        inputs in the calculator '''
        self.calcScreen = QLineEdit(self)
        self.calcScreen.setFrame(False)
        self.calcScreen.setReadOnly(True)
        font = self.calcScreen.font()
        font.setLetterSpacing(1, 2)
        font.setWeight(59)
        font.setPixelSize(27)
        self.calcScreen.setFont(font)
        self.calcScreen.setSizePolicy(QSizePolicy.Expanding,
                                      QSizePolicy.Expanding)
        grid.addWidget(self.calcScreen, 0, 0, 1, 5)
        ''' Initialisation of buttons, adding them to the grid and setuping of
        the signals for the buttons '''
        clrBtn = QPushButton("Clr", self)
        clrBtn.setShortcut("Ctrl+C")
        clrBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        clrBtn.clicked.connect(lambda: self.clearScreen())
        grid.addWidget(clrBtn, 1, 0, 1, 2)
        addBtn = QPushButton("+", self)
        addBtn.setShortcut("+")
        addBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        addBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(addBtn, 1, 2, 1, 1)
        subBtn = QPushButton("-", self)
        subBtn.setShortcut("-")
        subBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        subBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(subBtn, 1, 3, 1, 1)
        multBtn = QPushButton("*", self)
        multBtn.setShortcut("*")
        multBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        multBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(multBtn, 1, 4, 1, 1)

        bckSpaceBtn = QPushButton("Backspace", self)
        bckSpaceBtn.setShortcut("Backspace")
        bckSpaceBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        bckSpaceBtn.clicked.connect(lambda: self.calcScreen.backspace())
        grid.addWidget(bckSpaceBtn, 2, 0, 1, 1)
        SevBtn = QPushButton("7", self)
        SevBtn.setShortcut("7")
        SevBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        SevBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(SevBtn, 2, 1, 1, 1)
        EigBtn = QPushButton("8", self)
        EigBtn.setShortcut("8")
        EigBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        EigBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(EigBtn, 2, 2, 1, 1)
        NinBtn = QPushButton("9", self)
        NinBtn.setShortcut("9")
        NinBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        NinBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(NinBtn, 2, 3, 1, 1)
        divBtn = QPushButton("/", self)
        divBtn.setShortcut("/")
        divBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        divBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(divBtn, 2, 4, 1, 1)

        ParnthBtn = QPushButton("(", self)
        ParnthBtn.setShortcut("(")
        ParnthBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        ParnthBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(ParnthBtn, 3, 0, 1, 1)
        FoBtn = QPushButton("4", self)
        FoBtn.setShortcut("4")
        FoBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        FoBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(FoBtn, 3, 1, 1, 1)
        FivBtn = QPushButton("5", self)
        FivBtn.setShortcut("5")
        FivBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        FivBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(FivBtn, 3, 2, 1, 1)
        SixBtn = QPushButton("6", self)
        SixBtn.setShortcut("6")
        SixBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        SixBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(SixBtn, 3, 3, 1, 1)
        powBtn = QPushButton("**", self)
        powBtn.setShortcut("^")
        powBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        powBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(powBtn, 3, 4, 1, 1)

        ClsdPrntBtn = QPushButton(")", self)
        ClsdPrntBtn.setShortcut(")")
        ClsdPrntBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        ClsdPrntBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(ClsdPrntBtn, 4, 0, 1, 1)
        OnBtn = QPushButton("1", self)
        OnBtn.setShortcut("1")
        OnBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        OnBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(OnBtn, 4, 1, 1, 1)
        TwBtn = QPushButton("2", self)
        TwBtn.setShortcut("2")
        TwBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        TwBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(TwBtn, 4, 2, 1, 1)
        ThrBtn = QPushButton("3", self)
        ThrBtn.setShortcut("3")
        ThrBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        ThrBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(ThrBtn, 4, 3, 1, 1)
        EqBtn = QPushButton("=", self)
        EqBtn.setShortcut("Enter")
        EqBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        EqBtn.clicked.connect(lambda: self.calculate())
        grid.addWidget(EqBtn, 4, 4, 2, 1)

        HistBtn = QPushButton("Hist.", self)
        HistBtn.setShortcut("Ctrl+H")
        HistBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        HistBtn.clicked.connect(lambda: self.showHistory(font))
        grid.addWidget(HistBtn, 5, 0, 1, 1)
        ZerBtn = QPushButton("0", self)
        ZerBtn.setShortcut("0")
        ZerBtn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        ZerBtn.clicked.connect(lambda: self.changeText())
        grid.addWidget(ZerBtn, 5, 1, 1, 3)

        self.setLayout(grid)

        self.setWindowTitle("Calculator")
        self.show()

    def center(self):
        """ Finds center of the screen and moves main window there"""
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def clearScreen(self):
        self.haveBeenCleared = True
        self.calcScreen.clear()

    def changeText(self):
        """ Adds digit or symbol for calculation in to the QLineEdit widget """
        sender = self.sender()
        if not self.haveCalculationBeenDone:
            self.calcScreen.setText(self.calcScreen.text() + sender.text())
        else:
            self.calcScreen.clear()
            self.haveCalculationBeenDone = False
            if (not self.haveBeenCleared) and (sender.text() in "+-=/**"):
                CalculationResult = self.history[len(self.history) - 1].result
                self.calcScreen.setText(
                    str(CalculationResult) + self.calcScreen.text() +
                    sender.text())
            else:
                self.calcScreen.setText(self.calcScreen.text() + sender.text())
                self.haveBeenCleared = False

    def calculate(self):
        """ Takes string from QLineEdit widget and uses Calculation class to
        evaluate calculations, also grabs exceptions thrown by Calculation
        class """
        try:
            calc = Calculation(self.calcScreen.text())
            self.haveCalculationBeenDone = True
            self.history.append(calc)
            self.calcScreen.setText(calc.calc + "=" + str(calc.result))
        except ValueError:
            QMessageBox.question(
                self, "Message", "Check if your calculations don't" +
                " start and end with <b>'+ - / * **'</b> " +
                "or are there factors to every calculation", QMessageBox.Ok,
                QMessageBox.Ok)
        except ZeroDivisionError:
            QMessageBox.question(
                self, "Message", "Check if your calculations don't" +
                " include <b>division by ZERO</b>!", QMessageBox.Ok,
                QMessageBox.Ok)
        except SyntaxError:
            pass

    def showHistory(self, font):
        """ Shows the window with the previous calculations """
        pos = self.frameGeometry().topRight()
        self.History = History(self.history, font, pos)
        self.History.show()
Esempio n. 4
0
class Calculator(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        # Display Window
        self.display = QLineEdit()
        self.display.setReadOnly(True)
        self.display.setAlignment(Qt.AlignRight)
        self.display.setMaxLength(15)

        # Button Creation and Placement
        numLayout = QGridLayout()
        opLayout = QGridLayout()
        constLayout = QGridLayout()
        funcLayout = QGridLayout()

        buttonGroups = {
            'num': {
                'buttons': numPadList,
                'layout': numLayout,
                'columns': 3
            },
            'op': {
                'buttons': operatorList,
                'layout': opLayout,
                'columns': 2
            },
            'constants': {
                'buttons': constantList,
                'layout': constLayout,
                'columns': 1
            },
            'functions': {
                'buttons': functionList,
                'layout': funcLayout,
                'columns': 1
            },
        }

        for label in buttonGroups.keys():
            r = 0
            c = 0
            buttonPad = buttonGroups[label]
            for btnText in buttonPad['buttons']:
                button = Button(btnText, self.buttonClicked)
                buttonPad['layout'].addWidget(button, r, c)
                c += 1
                if c >= buttonPad['columns']:
                    c = 0
                    r += 1

        # Layout
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)

        mainLayout.addWidget(self.display, 0, 0, 1, 2)
        mainLayout.addLayout(numLayout, 1, 0)
        mainLayout.addLayout(opLayout, 1, 1)
        mainLayout.addLayout(constLayout, 2, 0)
        mainLayout.addLayout(funcLayout, 2, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle("My Calculator")

    def keyPressEvent(self, QKeyEvent):
        key = QKeyEvent.key()
        if QKeyEvent.text() in numPadList[:-1]:
            self.display.setText(self.display.text() + QKeyEvent.text())
        elif QKeyEvent.text() in operatorList[:6]:
            self.display.setText(self.display.text() + QKeyEvent.text())
        elif key == Qt.Key_Return or key == Qt.Key_Equal:
            try:
                result = str(eval(self.display.text()))
            except:
                result = 'Error!'
            self.display.setText(result)
        elif key == Qt.Key_ParenLeft:
            self.display.setText(self.display.text() + "(")
        elif key == Qt.Key_ParenRight:
            self.display.setText(self.display.text() + ")")
        elif key == Qt.Key_Backspace:
            self.display.setText(self.display.text()[:-1])

    def buttonClicked(self):

        if self.display.text() == 'Error!':
            self.display.setText('')

        button = self.sender()
        key = button.text()

        if key == '=':
            try:
                result = str(eval(self.display.text()))
            except:
                result = 'Error!'
            self.display.setText(result)
        elif key == 'C':
            self.display.clear()
        elif key == '←':
            self.display.backspace()
        elif key == constantList[0]:
            self.display.setText(self.display.text() + '3.141592')
        elif key == constantList[1]:
            self.display.setText(self.display.text() + '3E+8')
        elif key == constantList[2]:
            self.display.setText(self.display.text() + '340')
        elif key == constantList[3]:
            self.display.setText(self.display.text() + '1.5E+8')
        elif key in functionList:
            n = self.display.text()
            value = functionMap[functionList.index(key)][1](n)
            self.display.setText(str(value))
        else:
            self.display.setText(self.display.text() + key)
Esempio n. 5
0
class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'Hesap Makinesi QT5'
        self.left = 400
        self.top = 160
        self.width = 275
        self.height = 250
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        #Design Part

        # 1. textbox
        self.textbox = QLineEdit(self)
        self.textbox.move(30, 30)
        self.textbox.resize(195, 30)

        # 1. letter
        #7. button
        seven = QPushButton('7', self)
        seven.move(30, 75)
        seven.resize(35, 30)
        seven.clicked.connect(self.Nums)
        #8. button
        eight = QPushButton('8', self)
        eight.move(70, 75)
        eight.resize(35, 30)
        eight.clicked.connect(self.Nums)
        #9. button
        nine = QPushButton('9', self)
        nine.move(110, 75)
        nine.resize(35, 30)
        nine.clicked.connect(self.Nums)
        # reset button
        reset = QPushButton('C', self)
        reset.move(150, 75)
        reset.resize(35, 30)
        reset.clicked.connect(self.C)
        #Back button
        back = QPushButton('DEL', self)
        back.move(190, 75)
        back.resize(35, 30)
        back.clicked.connect(self.Back)

        #2. letter

        # 4 button
        four = QPushButton('4', self)
        four.move(30, 110)
        four.resize(35, 30)
        four.clicked.connect(self.Nums)
        # 5 button
        five = QPushButton('5', self)
        five.move(70, 110)
        five.resize(35, 30)
        five.clicked.connect(self.Nums)
        # 6 button
        six = QPushButton('6', self)
        six.move(110, 110)
        six.resize(35, 30)
        six.clicked.connect(self.Nums)
        # * buton
        mult = QPushButton('*', self)
        mult.move(150, 110)
        mult.resize(35, 30)
        mult.clicked.connect(self.Operator)
        # Squared buton
        sqared = QPushButton('x²', self)
        sqared.move(190, 110)
        sqared.resize(35, 30)
        sqared.clicked.connect(self.Squared)

        #3. line
        # 1 button
        one = QPushButton('1', self)
        one.move(30, 145)
        one.resize(35, 30)
        one.clicked.connect(self.Nums)
        # 2 button
        two = QPushButton('2', self)
        two.move(70, 145)
        two.resize(35, 30)
        two.clicked.connect(self.Nums)
        # 3 button
        three = QPushButton('3', self)
        three.move(110, 145)
        three.resize(35, 30)
        three.clicked.connect(self.Nums)
        # / button
        diveded = QPushButton('/', self)
        diveded.move(150, 145)
        diveded.resize(35, 30)
        diveded.clicked.connect(self.Operator)
        # Sqrt button
        sqrt = QPushButton('√', self)
        sqrt.move(190, 145)
        sqrt.resize(35, 30)
        sqrt.clicked.connect(self.Sqrt)

        #4. line
        # 0 button
        zero = QPushButton('0', self)
        zero.move(30, 180)
        zero.resize(35, 30)
        zero.clicked.connect(self.Nums)
        # . button
        point = QPushButton('.', self)
        point.move(70, 180)
        point.resize(35, 30)
        point.clicked.connect(self.Point)

        # + buttton
        plus = QPushButton('+', self)
        plus.move(110, 180)
        plus.resize(35, 30)
        plus.clicked.connect(self.Operator)
        # - buton
        minus = QPushButton('-', self)
        minus.move(150, 180)
        minus.resize(35, 30)
        minus.clicked.connect(self.Operator)
        # = button
        equal = QPushButton('=', self)
        equal.move(190, 180)
        equal.resize(35, 30)
        equal.clicked.connect(self.Equal)

        self.show()

        # Real Work
        # All action here

    def Nums(self):
        global num
        global newNum
        global action

        sender = self.sender()
        newNum = int(sender.text())
        setNum = str(newNum)
        if action == False:
            self.textbox.setText(self.textbox.text() + setNum)

        else:
            self.textbox.setText(setNum)
            action = False

    def Point(self):
        global opVar

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

    def Operator(self):
        global num
        global opVar
        global operator
        global sumIt

        counter += 1

        if counter > 1:
            self.Equal()

        num = self.textbox.text()

        sender = self.sender()

        operator = sender.text()

        action = True

    def Equal(self):
        global num
        global newNum
        global sumAll
        global operator
        global opVar

        newNum = self.textbox.text()

        if operator == "+":
            sumAll = float(num) + float(newNum)

        elif operator == "-":
            sumAll = float(num) - float(newNum)

        elif operator == "/":
            sumAll = float(num) / float(newNum)

        elif operator == "*":
            sumAll = float(num) * float(newNum)

        self.textbox.setText(str(sumAll))
        opVar = True

    def C(self):
        global newNum
        global sumAll
        global operator
        global num

        #Herşeyi sıfırla
        self.textbox.clear()
        num = 0.0
        newNum = 0.0
        sumAll = 0.0
        operator = ""

    def Back(self):
        self.textbox.backspace()

    def Squared(self):
        global num

        num = float(self.textbox.text())
        n = num**2
        num = n

        self.textbox.setText(str(num))

    def Sqrt(self):
        global num

        num = float(self.textbox.text())
        n = sqrt(num)
        num = n

        self.textbox.setText(str(num))
Esempio n. 6
0
class VirtualKeyboard(QWidget):
    sigInputString = pyqtSignal()
    sigKeyButtonClicked = pyqtSignal()

    def __init__(self):
        super(VirtualKeyboard, self).__init__()

        self.globalLayout = QVBoxLayout(self)
        self.keysLayout = QGridLayout()
        self.buttonLayout = QHBoxLayout()

        self.keyListByLines = [
            ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
            ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P"],
            ["A", "S", "D", "F", "G", "H", "J", "K", "L", "M"],
            ["Z", "X", "C", "V", "B", "N", "_", ".", "/", " "],
        ]
        self.inputString = ""  ## resetting input
        self.state = InputState.CAPITAL

        self.backButton = QPushButton()
        self.backButton.setText("DELETE")
        self.cancelButton = QPushButton()
        self.cancelButton.setText("CANCEL")

        self.currentLineEdit = QLineEdit()

        for lineIndex, line in enumerate(self.keyListByLines):
            for keyIndex, key in enumerate(line):
                buttonName = "keyButton" + key.capitalize()

                self.__setattr__(buttonName, KeyButton(key))
                self.keysLayout.addWidget(
                    self.getButtonByKey(key),
                    self.keyListByLines.index(line),
                    line.index(key),
                )

                self.getButtonByKey(key).setText(key)
                self.getButtonByKey(key).setFont(DEFAULT_FONT)
                self.getButtonByKey(key).sigKeyButtonClicked.connect(
                    lambda v=key: self.addInputByKey(v))

                self.keysLayout.setColumnMinimumWidth(keyIndex, 50)

            self.keysLayout.setRowMinimumHeight(lineIndex, 50)

        self.backButton.clicked.connect(self.backspace)
        self.cancelButton.clicked.connect(self.emitCancel)

        self.backButton.setFont(DEFAULT_FONT)
        self.cancelButton.setFont(DEFAULT_FONT)

        self.buttonLayout.addWidget(self.cancelButton)
        self.buttonLayout.addWidget(self.backButton)

        self.globalLayout.addLayout(self.keysLayout)

        self.globalLayout.addLayout(self.buttonLayout)
        self.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))

    def getButtonByKey(self, key):
        return getattr(self, "keyButton" + key.capitalize())

    def getLineForButtonByKey(self, key):
        return [key in keyList for keyList in self.keyListByLines].index(True)

    @pyqtSlot(QLineEdit)
    def setLineEdit(self, line_edit):
        # deadling with old line edit
        if self.currentLineEdit == line_edit:  #clicked the same line edit they were on
            return

        # updating new line edit
        self.currentLineEdit = line_edit

        self.inputString = self.currentLineEdit.text()

    def addInputByKey(self, key):
        self.inputString += (key.lower(), key.capitalize())[self.state]
        self.currentLineEdit.setText(self.inputString)

    def backspace(self):
        self.currentLineEdit.backspace()
        self.inputString = self.inputString[:-1]

    def emitInputString(self):
        self.sigInputString.emit(self.inputString)

    def emitCancel(self):
        self.sigInputString.emit()

    def sizeHint(self):
        return QSize(480, 272)

    def terminate(self):
        self.close