电竞比分网-中国电竞赛事及体育赛事平台

分享

學(xué)習(xí)使用PySide2制作一個(gè)簡(jiǎn)單的計(jì)算器

 印度阿三17 2020-03-14

使用工具

  • python PySide2

實(shí)現(xiàn)思路

  • 利用python腳本執(zhí)行函數(shù)eval(expression),求解算式字符串
  • 利用PySide2實(shí)現(xiàn)界面

最終效果

在這里插入圖片描述

代碼:

ui_calculator.py

from PySide2 import QtCore, QtGui, QtWidgets

class Ui_Calculator(object):
    def setupUi(self, Calculator):
        Calculator.setObjectName("Calculator")
        Calculator.resize(480, 430)
        Calculator.setMinimumSize(QtCore.QSize(480, 430))
        Calculator.setMaximumSize(QtCore.QSize(480, 430))
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(Calculator)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setSpacing(10)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtWidgets.QLabel(Calculator)
        self.label.setMinimumSize(QtCore.QSize(0, 80))
        font = QtGui.QFont()
        font.setFamily("黑體")
        font.setPointSize(15)
        self.label.setFont(font)
        self.label.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"")
        self.label.setFrameShape(QtWidgets.QFrame.Box)
        self.label.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.label.setWordWrap(True)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setSpacing(30)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setSpacing(12)
        self.gridLayout.setObjectName("gridLayout")
        self.btnR = QtWidgets.QPushButton(Calculator)
        self.btnR.setMinimumSize(QtCore.QSize(60, 60))
        self.btnR.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnR.setFont(font)
        self.btnR.setObjectName("btnR")
        self.gridLayout.addWidget(self.btnR, 0, 1, 1, 1)
        self.btn4 = QtWidgets.QPushButton(Calculator)
        self.btn4.setMinimumSize(QtCore.QSize(60, 60))
        self.btn4.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn4.setFont(font)
        self.btn4.setObjectName("btn4")
        self.gridLayout.addWidget(self.btn4, 2, 0, 1, 1)
        self.btn7 = QtWidgets.QPushButton(Calculator)
        self.btn7.setMinimumSize(QtCore.QSize(60, 60))
        self.btn7.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn7.setFont(font)
        self.btn7.setObjectName("btn7")
        self.gridLayout.addWidget(self.btn7, 1, 0, 1, 1)
        self.btn8 = QtWidgets.QPushButton(Calculator)
        self.btn8.setMinimumSize(QtCore.QSize(60, 60))
        self.btn8.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn8.setFont(font)
        self.btn8.setObjectName("btn8")
        self.gridLayout.addWidget(self.btn8, 1, 1, 1, 1)
        self.btnL = QtWidgets.QPushButton(Calculator)
        self.btnL.setMinimumSize(QtCore.QSize(60, 60))
        self.btnL.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnL.setFont(font)
        self.btnL.setObjectName("btnL")
        self.gridLayout.addWidget(self.btnL, 0, 0, 1, 1)
        self.btn9 = QtWidgets.QPushButton(Calculator)
        self.btn9.setMinimumSize(QtCore.QSize(60, 60))
        self.btn9.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn9.setFont(font)
        self.btn9.setObjectName("btn9")
        self.gridLayout.addWidget(self.btn9, 1, 2, 1, 1)
        self.btnDel = QtWidgets.QPushButton(Calculator)
        self.btnDel.setMinimumSize(QtCore.QSize(60, 60))
        self.btnDel.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnDel.setFont(font)
        self.btnDel.setObjectName("btnDel")
        self.gridLayout.addWidget(self.btnDel, 0, 2, 1, 1)
        self.btn5 = QtWidgets.QPushButton(Calculator)
        self.btn5.setMinimumSize(QtCore.QSize(60, 60))
        self.btn5.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn5.setFont(font)
        self.btn5.setObjectName("btn5")
        self.gridLayout.addWidget(self.btn5, 2, 1, 1, 1)
        self.btn6 = QtWidgets.QPushButton(Calculator)
        self.btn6.setMinimumSize(QtCore.QSize(60, 60))
        self.btn6.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn6.setFont(font)
        self.btn6.setObjectName("btn6")
        self.gridLayout.addWidget(self.btn6, 2, 2, 1, 1)
        self.btn1 = QtWidgets.QPushButton(Calculator)
        self.btn1.setMinimumSize(QtCore.QSize(60, 60))
        self.btn1.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn1.setFont(font)
        self.btn1.setObjectName("btn1")
        self.gridLayout.addWidget(self.btn1, 3, 0, 1, 1)
        self.btn2 = QtWidgets.QPushButton(Calculator)
        self.btn2.setMinimumSize(QtCore.QSize(60, 60))
        self.btn2.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn2.setFont(font)
        self.btn2.setObjectName("btn2")
        self.gridLayout.addWidget(self.btn2, 3, 1, 1, 1)
        self.btn3 = QtWidgets.QPushButton(Calculator)
        self.btn3.setMinimumSize(QtCore.QSize(60, 60))
        self.btn3.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn3.setFont(font)
        self.btn3.setObjectName("btn3")
        self.gridLayout.addWidget(self.btn3, 3, 2, 1, 1)
        self.btn0 = QtWidgets.QPushButton(Calculator)
        self.btn0.setMinimumSize(QtCore.QSize(60, 60))
        self.btn0.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btn0.setFont(font)
        self.btn0.setObjectName("btn0")
        self.gridLayout.addWidget(self.btn0, 4, 0, 1, 1)
        self.btnDot = QtWidgets.QPushButton(Calculator)
        self.btnDot.setMinimumSize(QtCore.QSize(60, 60))
        self.btnDot.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnDot.setFont(font)
        self.btnDot.setObjectName("btnDot")
        self.gridLayout.addWidget(self.btnDot, 4, 1, 1, 1)
        self.btnNegative = QtWidgets.QPushButton(Calculator)
        self.btnNegative.setMinimumSize(QtCore.QSize(60, 60))
        self.btnNegative.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnNegative.setFont(font)
        self.btnNegative.setObjectName("btnNegative")
        self.gridLayout.addWidget(self.btnNegative, 4, 2, 1, 1)
        self.horizontalLayout.addLayout(self.gridLayout)
        self.gridLayout_2 = QtWidgets.QGridLayout()
        self.gridLayout_2.setSpacing(12)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.btnClear = QtWidgets.QPushButton(Calculator)
        self.btnClear.setMinimumSize(QtCore.QSize(120, 60))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnClear.setFont(font)
        self.btnClear.setObjectName("btnClear")
        self.gridLayout_2.addWidget(self.btnClear, 0, 0, 1, 2)
        self.btnPlus = QtWidgets.QPushButton(Calculator)
        self.btnPlus.setMinimumSize(QtCore.QSize(60, 60))
        self.btnPlus.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnPlus.setFont(font)
        self.btnPlus.setObjectName("btnPlus")
        self.gridLayout_2.addWidget(self.btnPlus, 1, 0, 1, 1)
        self.btnMinus = QtWidgets.QPushButton(Calculator)
        self.btnMinus.setMinimumSize(QtCore.QSize(60, 60))
        self.btnMinus.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnMinus.setFont(font)
        self.btnMinus.setObjectName("btnMinus")
        self.gridLayout_2.addWidget(self.btnMinus, 1, 1, 1, 1)
        self.btnMulti = QtWidgets.QPushButton(Calculator)
        self.btnMulti.setMinimumSize(QtCore.QSize(60, 60))
        self.btnMulti.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnMulti.setFont(font)
        self.btnMulti.setObjectName("btnMulti")
        self.gridLayout_2.addWidget(self.btnMulti, 2, 0, 1, 1)
        self.btnDivide = QtWidgets.QPushButton(Calculator)
        self.btnDivide.setMinimumSize(QtCore.QSize(60, 60))
        self.btnDivide.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnDivide.setFont(font)
        self.btnDivide.setObjectName("btnDivide")
        self.gridLayout_2.addWidget(self.btnDivide, 2, 1, 1, 1)
        self.btnMod = QtWidgets.QPushButton(Calculator)
        self.btnMod.setMinimumSize(QtCore.QSize(60, 60))
        self.btnMod.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnMod.setFont(font)
        self.btnMod.setObjectName("btnMod")
        self.gridLayout_2.addWidget(self.btnMod, 3, 0, 1, 1)
        self.btnSqrt = QtWidgets.QPushButton(Calculator)
        self.btnSqrt.setMinimumSize(QtCore.QSize(60, 60))
        self.btnSqrt.setMaximumSize(QtCore.QSize(90, 90))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnSqrt.setFont(font)
        self.btnSqrt.setObjectName("btnSqrt")
        self.gridLayout_2.addWidget(self.btnSqrt, 3, 1, 1, 1)
        self.btnEqual = QtWidgets.QPushButton(Calculator)
        self.btnEqual.setMinimumSize(QtCore.QSize(120, 60))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.btnEqual.setFont(font)
        self.btnEqual.setObjectName("btnEqual")
        self.gridLayout_2.addWidget(self.btnEqual, 4, 0, 1, 2)
        self.horizontalLayout.addLayout(self.gridLayout_2)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_2.addLayout(self.verticalLayout)

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

    def retranslateUi(self, Calculator):
        Calculator.setWindowTitle(QtWidgets.QApplication.translate("Calculator", "Dialog", None, -1))
        self.label.setText(QtWidgets.QApplication.translate("Calculator", "TextLabel", None, -1))
        self.btnR.setText(QtWidgets.QApplication.translate("Calculator", ")", None, -1))
        self.btn4.setText(QtWidgets.QApplication.translate("Calculator", "4", None, -1))
        self.btn7.setText(QtWidgets.QApplication.translate("Calculator", "7", None, -1))
        self.btn8.setText(QtWidgets.QApplication.translate("Calculator", "8", None, -1))
        self.btnL.setText(QtWidgets.QApplication.translate("Calculator", "(", None, -1))
        self.btn9.setText(QtWidgets.QApplication.translate("Calculator", "9", None, -1))
        self.btnDel.setText(QtWidgets.QApplication.translate("Calculator", "<-", None, -1))
        self.btn5.setText(QtWidgets.QApplication.translate("Calculator", "5", None, -1))
        self.btn6.setText(QtWidgets.QApplication.translate("Calculator", "6", None, -1))
        self.btn1.setText(QtWidgets.QApplication.translate("Calculator", "1", None, -1))
        self.btn2.setText(QtWidgets.QApplication.translate("Calculator", "2", None, -1))
        self.btn3.setText(QtWidgets.QApplication.translate("Calculator", "3", None, -1))
        self.btn0.setText(QtWidgets.QApplication.translate("Calculator", "0", None, -1))
        self.btnDot.setText(QtWidgets.QApplication.translate("Calculator", ".", None, -1))
        self.btnNegative.setText(QtWidgets.QApplication.translate("Calculator", "-/ ", None, -1))
        self.btnClear.setText(QtWidgets.QApplication.translate("Calculator", "C", None, -1))
        self.btnPlus.setText(QtWidgets.QApplication.translate("Calculator", " ", None, -1))
        self.btnMinus.setText(QtWidgets.QApplication.translate("Calculator", "-", None, -1))
        self.btnMulti.setText(QtWidgets.QApplication.translate("Calculator", "*", None, -1))
        self.btnDivide.setText(QtWidgets.QApplication.translate("Calculator", "/", None, -1))
        self.btnMod.setText(QtWidgets.QApplication.translate("Calculator", "%", None, -1))
        self.btnSqrt.setText(QtWidgets.QApplication.translate("Calculator", "sqrt", None, -1))
        self.btnEqual.setText(QtWidgets.QApplication.translate("Calculator", "=", None, -1))

calculator.py

import sys
from math import sqrt
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from ui_calculator import Ui_Calculator

class Window(QWidget,Ui_Calculator):
    def __init__(self,parent = None):
        super().__init__()
        self.setupUi(self)

        # 需要用腳本求解的算式字符串
        self.expression = str()
        self.label.setText(self.expression)

        # 獲取ui文件中的QPushButton對(duì)象
        btnList = self.findChildren(QPushButton)

        # 信號(hào)槽連接
        for btn in btnList:
            btn.clicked.connect(self.slotFunction)


    @Slot()
    def slotFunction(self):
        dict = {self.btn0:'0',self.btn1:'1',self.btn2:'2',self.btn3:'3',
                self.btn4:'4',self.btn5:'5',self.btn6:'6',self.btn7:'7',
                self.btn8:'8',self.btn9:'9',self.btnL:'(',self.btnR:')',
                self.btnDot:'.',self.btnNegative:'-',self.btnPlus:' ',
                self.btnMinus:'-',self.btnMulti:'*',self.btnDivide:'/',
                self.btnSqrt:'sqrt',self.btnMod:'%'
                }

        if self.sender() in dict.keys():
            value = dict.get(self.sender())
            if '=' not in self.expression:
                self.expression  = value

        elif self.sender() is self.btnDel:      # '<-'按鍵
            # 判斷算式是否為空
            if len(self.expression):
                # 判斷是否算出答案,是則算式中含=,否則不含=
                if '=' not in self.expression:
                    self.expression = self.expression[:-1]  # 刪除末尾一個(gè)字符
                else:
                    self.expression = str()     # 刪除整個(gè)算式
        elif self.sender() is self.btnClear:    # 'C'按鍵
            self.expression = str()
        elif self.sender() is self.btnEqual:    # '='按鍵
            if '=' not in self.expression and len(self.expression):
                try:
                    result = eval(self.expression)
                    self.expression  = ('=' str(result))
                except:
                    self.expression  = '=Error'
            else:
                pass

        self.label.setText(self.expression)




if __name__ == '__main__':
    app =QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())


學(xué)習(xí)練手項(xiàng)目,若有不足,歡迎批評(píng)指正。

來(lái)源:https://www./content-4-659101.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多