pyqt5实现简单计算器

这篇博客展示了如何利用Python的PyQt5库创建一个简单的计算器应用。它包括数字按钮1-9、0、运算符按钮(加、减、乘、除)、等于号和清除按钮。用户界面设计为响应式,按钮大小固定,输入框从右到左显示输入内容。当点击等于号时,应用尝试计算输入的表达式,如果输入有效则显示结果,否则显示错误信息。
摘要由CSDN通过智能技术生成

pyqt5实现简单计算器

导入PyQt5包

pip install pyqt5

Ui_Form.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Cacular")
        Form.resize(400, 500)
        self.verticalLayout_5 = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setFont(QtGui.QFont("Times", 20))
        self.lineEdit.setReadOnly(True)
        #调整为从右边输入,大小等
        self.lineEdit.setAlignment(QtCore.Qt.AlignRight)
        self.lineEdit.setMaxLength(15)
        self.lineEdit.setMinimumSize(QtCore.QSize(0, 70))
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout_5.addWidget(self.lineEdit)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.Num_1 = QtWidgets.QPushButton(Form)
        self.Num_1.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_1.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_1.setObjectName("Num_1")
        self.verticalLayout_4.addWidget(self.Num_1)
        self.Num_4 = QtWidgets.QPushButton(Form)
        self.Num_4.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_4.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_4.setObjectName("Num_4")
        self.verticalLayout_4.addWidget(self.Num_4)
        self.Num_7 = QtWidgets.QPushButton(Form)
        self.Num_7.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_7.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_7.setObjectName("Num_7")
        self.verticalLayout_4.addWidget(self.Num_7)
        self.OP_plus = QtWidgets.QPushButton(Form)
        self.OP_plus.setMinimumSize(QtCore.QSize(70, 70))
        self.OP_plus.setMaximumSize(QtCore.QSize(70, 70))
        self.OP_plus.setObjectName("OP_plus")
        self.verticalLayout_4.addWidget(self.OP_plus)
        self.horizontalLayout.addLayout(self.verticalLayout_4)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.Num_2 = QtWidgets.QPushButton(Form)
        self.Num_2.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_2.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_2.setObjectName("Num_2")
        self.verticalLayout_3.addWidget(self.Num_2)
        self.Num_5 = QtWidgets.QPushButton(Form)
        self.Num_5.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_5.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_5.setObjectName("Num_5")
        self.verticalLayout_3.addWidget(self.Num_5)
        self.Num_8 = QtWidgets.QPushButton(Form)
        self.Num_8.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_8.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_8.setObjectName("Num_8")
        self.verticalLayout_3.addWidget(self.Num_8)
        self.Num_0 = QtWidgets.QPushButton(Form)
        self.Num_0.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_0.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_0.setObjectName("Num_0")
        self.verticalLayout_3.addWidget(self.Num_0)
        self.horizontalLayout.addLayout(self.verticalLayout_3)
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.Num_3 = QtWidgets.QPushButton(Form)
        self.Num_3.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_3.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_3.setObjectName("Num_3")
        self.verticalLayout_2.addWidget(self.Num_3)
        self.Num_6 = QtWidgets.QPushButton(Form)
        self.Num_6.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_6.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_6.setObjectName("Num_6")
        self.verticalLayout_2.addWidget(self.Num_6)
        self.Num_9 = QtWidgets.QPushButton(Form)
        self.Num_9.setMinimumSize(QtCore.QSize(70, 70))
        self.Num_9.setMaximumSize(QtCore.QSize(70, 70))
        self.Num_9.setObjectName("Num_9")
        self.verticalLayout_2.addWidget(self.Num_9)
        self.OP_minus = QtWidgets.QPushButton(Form)
        self.OP_minus.setMinimumSize(QtCore.QSize(70, 70))
        self.OP_minus.setMaximumSize(QtCore.QSize(70, 70))
        self.OP_minus.setObjectName("OP_minus")
        self.verticalLayout_2.addWidget(self.OP_minus)
        self.horizontalLayout.addLayout(self.verticalLayout_2)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.CE = QtWidgets.QPushButton(Form)
        self.CE.setMinimumSize(QtCore.QSize(70, 70))
        self.CE.setMaximumSize(QtCore.QSize(70, 70))
        self.CE.setObjectName("CE")
        self.verticalLayout.addWidget(self.CE)
        self.OP_multi = QtWidgets.QPushButton(Form)
        self.OP_multi.setMinimumSize(QtCore.QSize(70, 70))
        self.OP_multi.setMaximumSize(QtCore.QSize(70, 70))
        self.OP_multi.setObjectName("OP_multi")
        self.verticalLayout.addWidget(self.OP_multi)
        self.OP_devide = QtWidgets.QPushButton(Form)
        self.OP_devide.setMinimumSize(QtCore.QSize(70, 70))
        self.OP_devide.setMaximumSize(QtCore.QSize(70, 70))
        self.OP_devide.setObjectName("OP_devide")
        self.verticalLayout.addWidget(self.OP_devide)
        self.OP_equal = QtWidgets.QPushButton(Form)
        self.OP_equal.setMinimumSize(QtCore.QSize(70, 70))
        self.OP_equal.setMaximumSize(QtCore.QSize(70, 70))
        self.OP_equal.setObjectName("OP_equal")
        self.verticalLayout.addWidget(self.OP_equal)
        self.horizontalLayout.addLayout(self.verticalLayout)
        self.verticalLayout_5.addLayout(self.horizontalLayout)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Cacular"))
        self.Num_1.setText(_translate("Form", "1"))
        self.Num_4.setText(_translate("Form", "4"))
        self.Num_7.setText(_translate("Form", "7"))
        self.OP_plus.setText(_translate("Form", "+"))
        self.Num_2.setText(_translate("Form", "2"))
        self.Num_5.setText(_translate("Form", "5"))
        self.Num_8.setText(_translate("Form", "8"))
        self.Num_0.setText(_translate("Form", "0"))
        self.Num_3.setText(_translate("Form", "3"))
        self.Num_6.setText(_translate("Form", "6"))
        self.Num_9.setText(_translate("Form", "9"))
        self.OP_minus.setText(_translate("Form", "-"))
        self.CE.setText(_translate("Form", "重置"))
        self.OP_multi.setText(_translate("Form", "*"))
        self.OP_devide.setText(_translate("Form", "/"))
        self.OP_equal.setText(_translate("Form", "="))

Cacular.py

from Ui_Form import Ui_Form
import sys
from PyQt5.QtWidgets import QWidget, QApplication

class Cacular(QWidget, Ui_Form):
    def __init__(self):
        super(Cacular, self).__init__()
        self.setupUi(self)
        self.connecter()
        self.show()
    def ps_CE(self):
        self.lineEdit.clear()

    def ps_Num_1(self):
        self.lineEdit.insert('1')

    def ps_Num_0(self):
        self.lineEdit.insert('0')

    def ps_Num_2(self):
        self.lineEdit.insert('2')

    def ps_Num_3(self):
        self.lineEdit.insert('3')

    def ps_Num_4(self):
        self.lineEdit.insert('4')

    def ps_Num_5(self):
        self.lineEdit.insert('5')

    def ps_Num_6(self):
        self.lineEdit.insert('6')

    def ps_Num_7(self):
        self.lineEdit.insert('7')

    def ps_Num_8(self):
        self.lineEdit.insert('8')

    def ps_Num_9(self):
        self.lineEdit.insert('9')

    def ps_plus(self):
        self.lineEdit.insert('+')

    def ps_minus(self):
        self.lineEdit.insert('-')

    def ps_multi(self):
        self.lineEdit.insert('*')

    def ps_devide(self):
        self.lineEdit.insert('/')

    def connecter(self):
        self.Num_0.clicked.connect(self.ps_Num_0)
        self.Num_1.clicked.connect(self.ps_Num_1)
        self.Num_2.clicked.connect(self.ps_Num_2)
        self.Num_3.clicked.connect(self.ps_Num_3)
        self.Num_4.clicked.connect(self.ps_Num_4)
        self.Num_5.clicked.connect(self.ps_Num_5)
        self.Num_6.clicked.connect(self.ps_Num_6)
        self.Num_7.clicked.connect(self.ps_Num_7)
        self.Num_8.clicked.connect(self.ps_Num_8)
        self.Num_9.clicked.connect(self.ps_Num_9)
        self.OP_plus.clicked.connect(self.ps_plus)
        self.OP_minus.clicked.connect(self.ps_minus)
        self.OP_multi.clicked.connect(self.ps_multi)
        self.OP_devide.clicked.connect(self.ps_devide)
        self.OP_equal.clicked.connect(self.calcu)
        self.CE.clicked.connect(self.ps_CE)

    def calcu(self):
        text = self.lineEdit.text()
        try:
            result = eval(text)
            self.lineEdit.setText(str(eval(text)))
        except:
            self.lineEdit.setText('invalid syntax!')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    Ca = Cacular()
    sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值