Pyqt简易计算器

Pyqt实现,四则运算运用了内置函数。

主控制类(文件名任意):

import MainWin
import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget
class mainctl(QMainWindow,MainWin.Ui_MainWindow):
    def __init__(self):
        super(mainctl,self).__init__()
        self.setupUi(self)

    @pyqtSlot()
    def on_pt1_clicked(self):
        self.plainTextEdit.insertPlainText('1')
    @pyqtSlot()
    def on_pt2_clicked(self):
        self.plainTextEdit.insertPlainText('2')

    @pyqtSlot()
    def on_pt3_clicked(self):
        self.plainTextEdit.insertPlainText('3')

    @pyqtSlot()
    def on_pt3_clicked(self):
        self.plainTextEdit.insertPlainText('3')

    @pyqtSlot()
    def on_pt4_clicked(self):
        self.plainTextEdit.insertPlainText('4')

    @pyqtSlot()
    def on_pt5_clicked(self):
        self.plainTextEdit.insertPlainText('5')

    @pyqtSlot()
    def on_pt6_clicked(self):
        self.plainTextEdit.insertPlainText('6')

    @pyqtSlot()
    def on_pt7_clicked(self):
        self.plainTextEdit.insertPlainText('7')

    @pyqtSlot()
    def on_pt8_clicked(self):
        self.plainTextEdit.insertPlainText('8')

    @pyqtSlot()
    def on_pt9_clicked(self):
        self.plainTextEdit.insertPlainText('9')

    @pyqtSlot()
    def on_pt0_clicked(self):
        self.plainTextEdit.insertPlainText('0')

    @pyqtSlot()
    def on_ptchu_clicked(self):
        self.plainTextEdit.insertPlainText('/')

    @pyqtSlot()
    def on_ptcheng_clicked(self):
        self.plainTextEdit.insertPlainText('*')

    @pyqtSlot()
    def on_ptjia_clicked(self):
        self.plainTextEdit.insertPlainText('+')

    @pyqtSlot()
    def on_ptjian_clicked(self):
        self.plainTextEdit.insertPlainText('-')

    @pyqtSlot()
    def on_ptclear_clicked(self):
        self.plainTextEdit.clear()

    @pyqtSlot()
    def on_ptdel_clicked(self):
        str=self.plainTextEdit.toPlainText()
        if len(str)==0:
            return
        else:
            str=str[0:(len(str)-1)]
        self.plainTextEdit.clear()
        self.plainTextEdit.insertPlainText(str)

    @pyqtSlot()
    def on_ptclose_clicked(self):
        self.close()
        sys.exit(app.exec())

    @pyqtSlot()
    def on_ptres_clicked(self):
        # str=self.plainTextEdit.
        str=self.plainTextEdit.toPlainText()
        str=str.splitlines()
        index=len(str)-1
        if index<0:
            return
        print(str[index])
        try:
            res=eval(str[index])
            self.plainTextEdit.appendPlainText('=%.2f\n' % res)
        except:
            self.plainTextEdit.appendPlainText('输入错误\n')
        # self.plainTextEdit.appendPlainText('=')

if __name__=='__main__':
    app=QApplication(sys.argv)
    win=mainctl()
    win.show()
    sys.exit(app.exec())


QtDesigner生成的py主界面类(文件名:MainWin.py):

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'MainWin.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(851, 609)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(60, 30, 701, 491))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridWidget = QtWidgets.QWidget(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(10)
        sizePolicy.setHeightForWidth(self.gridWidget.sizePolicy().hasHeightForWidth())
        self.gridWidget.setSizePolicy(sizePolicy)
        self.gridWidget.setObjectName("gridWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridWidget)
        self.gridLayout.setObjectName("gridLayout")
        self.ptcolse = QtWidgets.QPushButton(self.gridWidget)
        self.ptcolse.setObjectName("ptcolse")
        self.gridLayout.addWidget(self.ptcolse, 1, 0, 1, 1)
        self.pt0 = QtWidgets.QPushButton(self.gridWidget)
        self.pt0.setObjectName("pt0")
        self.gridLayout.addWidget(self.pt0, 7, 0, 1, 1)
        self.pt3 = QtWidgets.QPushButton(self.gridWidget)
        self.pt3.setObjectName("pt3")
        self.gridLayout.addWidget(self.pt3, 2, 2, 1, 1)
        self.ptany = QtWidgets.QPushButton(self.gridWidget)
        self.ptany.setObjectName("ptany")
        self.gridLayout.addWidget(self.ptany, 1, 1, 1, 1)
        self.pt1 = QtWidgets.QPushButton(self.gridWidget)
        self.pt1.setObjectName("pt1")
        self.gridLayout.addWidget(self.pt1, 2, 0, 1, 1)
        self.pt4 = QtWidgets.QPushButton(self.gridWidget)
        self.pt4.setObjectName("pt4")
        self.gridLayout.addWidget(self.pt4, 5, 0, 1, 1)
        self.pt7 = QtWidgets.QPushButton(self.gridWidget)
        self.pt7.setObjectName("pt7")
        self.gridLayout.addWidget(self.pt7, 6, 0, 1, 1)
        self.ptclear = QtWidgets.QPushButton(self.gridWidget)
        self.ptclear.setObjectName("ptclear")
        self.gridLayout.addWidget(self.ptclear, 1, 2, 1, 1)
        self.ptjia = QtWidgets.QPushButton(self.gridWidget)
        self.ptjia.setObjectName("ptjia")
        self.gridLayout.addWidget(self.ptjia, 2, 3, 1, 1)
        self.pt2 = QtWidgets.QPushButton(self.gridWidget)
        self.pt2.setObjectName("pt2")
        self.gridLayout.addWidget(self.pt2, 2, 1, 1, 1)
        self.ptcheng = QtWidgets.QPushButton(self.gridWidget)
        self.ptcheng.setObjectName("ptcheng")
        self.gridLayout.addWidget(self.ptcheng, 6, 3, 1, 1)
        self.ptjian = QtWidgets.QPushButton(self.gridWidget)
        self.ptjian.setObjectName("ptjian")
        self.gridLayout.addWidget(self.ptjian, 5, 3, 1, 1)
        self.pt8 = QtWidgets.QPushButton(self.gridWidget)
        self.pt8.setObjectName("pt8")
        self.gridLayout.addWidget(self.pt8, 6, 1, 1, 1)
        self.pt9 = QtWidgets.QPushButton(self.gridWidget)
        self.pt9.setObjectName("pt9")
        self.gridLayout.addWidget(self.pt9, 6, 2, 1, 1)
        self.ptdel = QtWidgets.QPushButton(self.gridWidget)
        self.ptdel.setObjectName("ptdel")
        self.gridLayout.addWidget(self.ptdel, 1, 3, 1, 1)
        self.ptchu = QtWidgets.QPushButton(self.gridWidget)
        self.ptchu.setObjectName("ptchu")
        self.gridLayout.addWidget(self.ptchu, 7, 3, 1, 1)
        self.ptres = QtWidgets.QPushButton(self.gridWidget)
        self.ptres.setObjectName("ptres")
        self.gridLayout.addWidget(self.ptres, 7, 1, 1, 2)
        self.pt6 = QtWidgets.QPushButton(self.gridWidget)
        self.pt6.setObjectName("pt6")
        self.gridLayout.addWidget(self.pt6, 5, 2, 1, 1)
        self.pt5 = QtWidgets.QPushButton(self.gridWidget)
        self.pt5.setObjectName("pt5")
        self.gridLayout.addWidget(self.pt5, 5, 1, 1, 1)
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.gridWidget)
        self.plainTextEdit.setReadOnly(True)
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.gridLayout.addWidget(self.plainTextEdit, 0, 0, 1, 4)
        self.verticalLayout.addWidget(self.gridWidget)
        MainWindow.setCentralWidget(self.centralwidget)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.ptcolse.setText(_translate("MainWindow", "退出"))
        self.pt0.setText(_translate("MainWindow", "0"))
        self.pt3.setText(_translate("MainWindow", "3"))
        self.ptany.setText(_translate("MainWindow", "不知道写啥"))
        self.pt1.setText(_translate("MainWindow", "1"))
        self.pt4.setText(_translate("MainWindow", "4"))
        self.pt7.setText(_translate("MainWindow", "7"))
        self.ptclear.setText(_translate("MainWindow", "清空"))
        self.ptjia.setText(_translate("MainWindow", "+"))
        self.pt2.setText(_translate("MainWindow", "2"))
        self.ptcheng.setText(_translate("MainWindow", "*"))
        self.ptjian.setText(_translate("MainWindow", "-"))
        self.pt8.setText(_translate("MainWindow", "8"))
        self.pt9.setText(_translate("MainWindow", "9"))
        self.ptdel.setText(_translate("MainWindow", "删除"))
        self.ptchu.setText(_translate("MainWindow", "/"))
        self.ptres.setText(_translate("MainWindow", "计算结果"))
        self.pt6.setText(_translate("MainWindow", "6"))
        self.pt5.setText(_translate("MainWindow", "5"))





效果就如下面这样:
在这里插入图片描述

吐槽:多继承逻辑好花哨。GUI编程逻辑挺重要的,编码前要理清逻辑。

发布了62 篇原创文章 · 获赞 83 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41033366/article/details/104413851