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 = ""
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))
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()
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)
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))
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