Python3.5 + PyQt5 + Eric6, a calculator code, pyqt5eric6

Source: Internet
Author: User

Python3.5 + PyQt5 + Eric6, a calculator code, pyqt5eric6

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_div = 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 div_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 formula temp_dev_minus = div_minus_minus.search (str_expire) for obtaining/-by using the above regular expression ). 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 -- change to ++-change -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_div.search (str_expire ). group (), touble_cale (mul_div.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", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n""

:

The above is all the content of this article. I hope it will be helpful for your learning and support for helping customers.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.