This article mainly introduces a calculator code implemented by python3.5 + PyQt5 + Eric6. the calculator can be run perfectly in the windows732-bit system. if you are interested, please take a look. This article mainly introduces a calculator method (with code) implemented by python3.5 + PyQt5 + Eric6. the calculator can be run perfectly in the Windows 7 32-bit system. if you are interested, please take a look.
Currently, simple computing can be implemented. Reset before calculation. the default number during design is 0. after learning for half a day, we made such a result, with many bugs. Python3.5 + PyQt5 + Eric6 can run the calculator perfectly in the 32-bit Windows 7 system. after a simple learning for half a day, there is a bug in drawing implementation. some buttons have not yet been implemented and will be optimized in the future.
Code structure
Jisuan. py
Import re # match the multiplication and division of integers or decimal places, including the case where there is a minus sign at the beginning of mul_p = re. compile ("(-? \ D +) (\. \ d + )? (\ * | /)(-? \ D +) (\. \ d + )? ") # Match the addition and subtraction of integers or decimal places, including the minus signs at the beginning. plus_minus = re. compile ("(-? \ D +) (\. \ d + )? (-| \ + )(-? \ D +) (\. \ d + )? ") # Matching brackets bracket = re. compile ("\ ([^ ()] * \)") # The multiplication result is multiplied by a negative number, including the minus sign at the beginning. mul_minus_minus = re. compile ("(-? \ D +) (\. \ d + )? (\ *-) (\ D +) (\. \ d + )? ") # When the division is matched, it is multiplied by a negative number, including the minus sign at the beginning. p_minus_minus = re. compile ("(-? \ D +) (\. \ d + )? (/-) (\ D +) (\. \ d + )? ") # Define a two-digit addition, subtraction, multiplication, division, matching the number on the right and the number on the left, and then calculate def touble_cale (str_expire): if str_expire.count (" + ") = 1: right_num = float (str_expire [(str_expire.find ("+") + 1):]) left_num = float (str_expire [: str_expire.find ("+")]) return str (right_num + left_num) elif str_expire [1:]. count ("-") = 1: right_num = float (str_expire [: str_expire.find ("-", 1)]) left_num = float (str_expire [(str_expire.find ("-", 1) + 1):]) retur N str (right_num-left_num) elif str_expire.count ("*") = 1: right_num = float (str_expire [: str_expire.find ("*")]) left_num = float (str_expire [(str_expire.find ("*") + 1):]) return str (right_num * left_num) elif str_expire.count ("/") = 1: right_num = float (str_expire [: str_expire.find ("/")]) left_num = float (str_expire [(str_expire.find ("/") + 1):]) return str (right_num/left_num) # defines a method to determine whether a method exists by multiplying the number and division In the case of a negative number, def judge_mul_minus (str_expire): # determine the part of the formula multiplied by a negative number if len (re. findall ("(\ *-)", str_expire ))! = 0: # Call the regular expression above to obtain the *-formula temp_mul_minus = mul_minus_minus.search (str_expire ). group () # Replace *-with * and put-in front of temp_mul_minus_2 = temp_mul_minus.replace (temp_mul_minus, "-" + temp_mul_minus.replace ("*-","*")) # Replace the modified part with the original part str_expire = reverse (temp_mul_minus, temp_mul_minus_2) return second (str_expire) # return str_expire # elif len (re. findall (r "(/-)", str_expire ))! = 0: # Call the regular expression above to obtain the/-formula temp_dev_minus = p_minus_minus.search (str_expire ). group () # Replace/-with/And put-in front of temp_dev_minus_2 = temp_dev_minus.replace (temp_dev_minus, "-" + temp_dev_minus.replace ("/-","/")) # Replace the modified part with the original part str_expire = str_expire.replace (temp_dev_minus, temp_dev_minus_2) return judge_mul_minus (str_expire) # call change_sign to replace ++ in the formula with = +-with-return change_sign (str_expire) # define a method and change -- to ++-- Def change_sign (str_expire): if len (re. findall (r "(\ +-)", str_expire ))! = 0: str_expire = str_expire.replace ("+-", "-") return change_sign (str_expire) elif len (re. findall (r "(--)", str_expire ))! = 0: str_expire = str_expire.replace ("--", "+") return change_sign (str_expire) return str_expire # defines a method for calculating formulas with only addition, subtraction, multiplication, division, multiplication def cale_mix (str_expire) is prioritized ): # If there is a symbol number in the formula, that is, + 5-6*8/8, this is the case that the number is directly put back. otherwise, calculate the multiplication and division before processing the addition and subtraction while len (re. findall ("[-+ */]", str_expire [1:])! = 0: if len (re. findall ("(\ * |/)", str_expire ))! = 0: str_expire = str_expire.replace (mul_p.search (str_expire ). group (), touble_cale (mul_p.search (str_expire ). group () elif len (re. findall ("(\ + |-)", str_expire ))! = 0: str_expire = str_expire.replace (plus_minus.search (str_expire ). group (), touble_cale (plus_minus.search (str_expire ). group () return str_expire # define a method used to remove parentheses and call the preceding method to calculate def remove_bracket (str_expire): # determine whether the formula contains parentheses if len (bracket. findall (str_expire) = 0: return cale_mix (judge_mul_minus (str_expire) elif len (bracket. findall (str_expire ))! = 0: while len (bracket. findall (str_expire ))! = 0: # print (bracket. search (str_expire ). group () # only the content in the brackets is prioritized and replaced with the content until there is no bracket position str_expire = str_expire.replace (bracket. search (str_expire ). group (), cale_mix (judge_mul_minus (bracket. search (str_expire ). group () [1:-1]) str_expire = cale_mix (judge_mul_minus (str_expire) return str_expireif name = "main": while True: user_input_expire = input ("Enter your formula: (do not include space, q indicates exit):") print ("% s = % s" % (user_input_expire, remove_bracket (user_input_expire) continue
Untitled. py
#-*-Coding: UTF-8-*-from PyQt5.QtCore import * from export import * from PyQt5 import QtCore, QtGui, QtWidgetsfrom export import Ui_Dialogfrom jisuan import Export Dialog (QDialog, Ui_Dialog ): def init (self, parent = None): super (Dialog, self ). init (parent) self. setupUi (self) @ pyqtSlot () def on_Button_6_clicked (self): self. edit_xianshi.insertPlainText ('6') @ pyqtSlot () def on_Button_2_clicked (self): self. edit_xianshi.insertPlainText ('2') @ pyqtSlot () def on_Button_3_clicked (self): self. edit_xianshi.insertPlainText ('3') @ pyqtSlot () def on_Button_pingfang_clicked (self): me = self. edit_xianshi.toPlainText () m = int (me) * int (me) self. edit_xianshi.clear () self. edit_xianshi.append (str (m) @ pyqtSlot () def on_Button_add_clicked (self): h = self. edit_xianshi.toPlainText () self. edit_xianshi.clear () self. edit_xianshi.append (h + ') @ pyqtSlot () def on_Button_jian_clicked (self): h = self. edit_xianshi.toPlainText () self. edit_xianshi.clear () self. edit_xianshi.append (h + '-') @ pyqtSlot () def on_Button_9_clicked (self): self. edit_xianshi.insertPlainText ('9') @ pyqtSlot () def on_Button_chu_clicked (self): h = self. edit_xianshi.toPlainText () self. edit_xianshi.clear () self. edit_xianshi.append (h + '/') @ pyqtSlot () def on_Button_cheng_clicked (self): h = self. edit_xianshi.toPlainText () self. edit_xianshi.clear () self. edit_xianshi.append (h + '*') @ pyqtSlot () def on_Button_8_clicked (self): self. edit_xianshi.insertPlainText ('8') @ pyqtSlot () def on_Button_4_clicked (self): self. edit_xianshi.insertPlainText ('4') @ pyqtSlot () def on_Button_esc_clicked (self): self. edit_xianshi.clear () @ pyqtSlot () def on_Button_7_clicked (self): self. edit_xianshi.insertPlainText ('7') @ pyqtSlot () def on_button_shortclicked (self): self. edit_xianshi.insertPlainText ('1') @ pyqtSlot () def on_Button_5_clicked (self): self. edit_xianshi.insertPlainText ('5') @ pyqtSlot () def on_Button_xiaoshu_clicked (self): self. edit_xianshi.insertPlainText ('. ') @ pyqtSlot () def on_Button_0_clicked (self): self. edit_xianshi.insertPlainText ('0') @ pyqtSlot () def on_Button_dengyu_clicked (self): pe = self. edit_xianshi.toPlainText () m = remove_bracket (pe) self. edit_xianshi.clear () self. edit_xianshi.append (str (m) def on_Button_fenzhi_clicked (self): pe = self. edit_xianshi.toPlainText () if int (pe) = 0: QMessageBox. information (self, U' prompt ', U' zero cannot be used as denominator') Dialog () else: m = 1/(int (pe) self. edit_xianshi.clear () self. edit_xianshi.append (str (m) Dialog () if name = "main": import sys app = QtWidgets. QApplication (sys. argv) app. processEvents () ui = Dialog () ui. show () sys.exit(app.exe c _())
Ui_untitled.py
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'C:\Users\Administrator\Desktop\pyqt5\untitled.ui'## Created by: PyQt5 UI code generator 5.5## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(357, 320) Dialog.setStyleSheet("font: 75 16pt \"Aharoni\";\n""background-color: rgb(206, 255, 251);") self.label = QtWidgets.QLabel(Dialog) self.label.setGeometry(QtCore.QRect(201, 210, 301, 21)) self.label.setText("") self.label.setObjectName("label") self.Edit_xianshi = QtWidgets.QTextEdit(Dialog) self.Edit_xianshi.setGeometry(QtCore.QRect(0, 0, 351, 41)) self.Edit_xianshi.setStyleSheet("font: 75 16pt \"Aharoni\";") self.Edit_xianshi.setObjectName("Edit_xianshi") self.gridLayoutWidget = QtWidgets.QWidget(Dialog) self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 30, 351, 281)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout.setObjectName("gridLayout") self.Button_6 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_6.setObjectName("Button_6") self.gridLayout.addWidget(self.Button_6, 2, 2, 1, 1) self.Button_2 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_2.setObjectName("Button_2") self.gridLayout.addWidget(self.Button_2, 3, 1, 1, 1) self.Button_3 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_3.setObjectName("Button_3") self.gridLayout.addWidget(self.Button_3, 3, 2, 1, 1) self.Button_fenzhi = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_fenzhi.setObjectName("Button_fenzhi") self.gridLayout.addWidget(self.Button_fenzhi, 1, 3, 1, 1) self.Button_pingfang = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_pingfang.setObjectName("Button_pingfang") self.gridLayout.addWidget(self.Button_pingfang, 0, 3, 1, 1) self.Button_add = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_add.setObjectName("Button_add") self.gridLayout.addWidget(self.Button_add, 2, 3, 1, 1) self.Button_jian = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_jian.setObjectName("Button_jian") self.gridLayout.addWidget(self.Button_jian, 3, 3, 1, 1) self.Button_9 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_9.setObjectName("Button_9") self.gridLayout.addWidget(self.Button_9, 1, 2, 1, 1) self.Button_chu = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_chu.setObjectName("Button_chu") self.gridLayout.addWidget(self.Button_chu, 0, 2, 1, 1) self.Button_cheng = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_cheng.setObjectName("Button_cheng") self.gridLayout.addWidget(self.Button_cheng, 0, 1, 1, 1) self.Button_8 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_8.setObjectName("Button_8") self.gridLayout.addWidget(self.Button_8, 1, 1, 1, 1) self.Button_4 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_4.setObjectName("Button_4") self.gridLayout.addWidget(self.Button_4, 2, 0, 1, 1) self.Button_esc = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_esc.setObjectName("Button_esc") self.gridLayout.addWidget(self.Button_esc, 0, 0, 1, 1) self.Button_7 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_7.setObjectName("Button_7") self.gridLayout.addWidget(self.Button_7, 1, 0, 1, 1) self.Button_1 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_1.setObjectName("Button_1") self.gridLayout.addWidget(self.Button_1, 3, 0, 1, 1) self.Button_5 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_5.setObjectName("Button_5") self.gridLayout.addWidget(self.Button_5, 2, 1, 1, 1) self.pushButton_17 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_17.setText("") self.pushButton_17.setObjectName("pushButton_17") self.gridLayout.addWidget(self.pushButton_17, 4, 0, 1, 1) self.Button_xiaoshu = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_xiaoshu.setObjectName("Button_xiaoshu") self.gridLayout.addWidget(self.Button_xiaoshu, 4, 1, 1, 1) self.Button_0 = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_0.setStyleSheet("") self.Button_0.setObjectName("Button_0") self.gridLayout.addWidget(self.Button_0, 4, 2, 1, 1) self.Button_dengyu = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_dengyu.setObjectName("Button_dengyu") self.gridLayout.addWidget(self.Button_dengyu, 4, 3, 1, 1) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.Edit_xianshi.setHtml(_translate("Dialog", "\n""
\n""0
")) self.Button_6.setText(_translate("Dialog", "6")) self.Button_2.setText(_translate("Dialog", "2")) self.Button_3.setText(_translate("Dialog", "3")) self.Button_fenzhi.setText(_translate("Dialog", "1/^")) self.Button_pingfang.setText(_translate("Dialog", "^2")) self.Button_add.setText(_translate("Dialog", "+")) self.Button_jian.setText(_translate("Dialog", "-")) self.Button_9.setText(_translate("Dialog", "9")) self.Button_chu.setText(_translate("Dialog", "/")) self.Button_cheng.setText(_translate("Dialog", "*")) self.Button_8.setText(_translate("Dialog", "8")) self.Button_4.setText(_translate("Dialog", "4")) self.Button_esc.setText(_translate("Dialog", "esc")) self.Button_7.setText(_translate("Dialog", "7")) self.Button_1.setText(_translate("Dialog", "1")) self.Button_5.setText(_translate("Dialog", "5")) self.Button_xiaoshu.setText(_translate("Dialog", ".")) self.Button_0.setText(_translate("Dialog", "0")) self.Button_dengyu.setText(_translate("Dialog", "="))if name == "main": import sys app = QtWidgets.QApplication(sys.argv) Dialog = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_())
:
The above is the details of a calculator method (with code) implemented by python3.5 + PyQt5 + Eric6. For more information, see other related articles in the first PHP community!