PyQt5实现简易计算器


Posted in Python onMay 30, 2020

本文实例为大家分享了PyQt5实现简易计算器的具体代码,供大家参考,具体内容如下

效果图:

PyQt5实现简易计算器

界面代码

calc_interface.py

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

# Form implementation generated from reading ui file 'calc_interface.ui'
#
# Created by: PyQt5 UI code generator 5.8.2
#
# 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(647, 675)
 self.centralwidget = QtWidgets.QWidget(MainWindow)
 self.centralwidget.setObjectName("centralwidget")
 self.b_1 = QtWidgets.QPushButton(self.centralwidget)
 self.b_1.setGeometry(QtCore.QRect(10, 330, 71, 71))
 self.b_1.setObjectName("b_1")
 self.b_2 = QtWidgets.QPushButton(self.centralwidget)
 self.b_2.setGeometry(QtCore.QRect(80, 330, 71, 71))
 self.b_2.setObjectName("b_2")
 self.b_3 = QtWidgets.QPushButton(self.centralwidget)
 self.b_3.setGeometry(QtCore.QRect(150, 330, 71, 71))
 self.b_3.setObjectName("b_3")
 self.b_6 = QtWidgets.QPushButton(self.centralwidget)
 self.b_6.setGeometry(QtCore.QRect(150, 400, 71, 71))
 self.b_6.setObjectName("b_6")
 self.b_4 = QtWidgets.QPushButton(self.centralwidget)
 self.b_4.setGeometry(QtCore.QRect(10, 400, 71, 71))
 self.b_4.setObjectName("b_4")
 self.b_5 = QtWidgets.QPushButton(self.centralwidget)
 self.b_5.setGeometry(QtCore.QRect(80, 400, 71, 71))
 self.b_5.setObjectName("b_5")
 self.b_8 = QtWidgets.QPushButton(self.centralwidget)
 self.b_8.setGeometry(QtCore.QRect(80, 470, 71, 71))
 self.b_8.setObjectName("b_8")
 self.b_9 = QtWidgets.QPushButton(self.centralwidget)
 self.b_9.setGeometry(QtCore.QRect(150, 470, 71, 71))
 self.b_9.setObjectName("b_9")
 self.b_7 = QtWidgets.QPushButton(self.centralwidget)
 self.b_7.setGeometry(QtCore.QRect(10, 470, 71, 71))
 self.b_7.setObjectName("b_7")
 self.b_eq = QtWidgets.QPushButton(self.centralwidget)
 self.b_eq.setGeometry(QtCore.QRect(150, 540, 211, 71))
 self.b_eq.setObjectName("b_eq")
 self.b_mod = QtWidgets.QPushButton(self.centralwidget)
 self.b_mod.setGeometry(QtCore.QRect(220, 400, 71, 71))
 self.b_mod.setObjectName("b_mod")
 self.b_bra_l = QtWidgets.QPushButton(self.centralwidget)
 self.b_bra_l.setGeometry(QtCore.QRect(220, 330, 71, 71))
 self.b_bra_l.setObjectName("b_bra_l")
 self.b_div = QtWidgets.QPushButton(self.centralwidget)
 self.b_div.setGeometry(QtCore.QRect(220, 260, 71, 71))
 self.b_div.setObjectName("b_div")
 self.b_add = QtWidgets.QPushButton(self.centralwidget)
 self.b_add.setGeometry(QtCore.QRect(10, 260, 71, 71))
 self.b_add.setObjectName("b_add")
 self.b_sub = QtWidgets.QPushButton(self.centralwidget)
 self.b_sub.setGeometry(QtCore.QRect(80, 260, 71, 71))
 self.b_sub.setObjectName("b_sub")
 self.b_mul = QtWidgets.QPushButton(self.centralwidget)
 self.b_mul.setGeometry(QtCore.QRect(150, 260, 71, 71))
 self.b_mul.setObjectName("b_mul")
 self.b_pow = QtWidgets.QPushButton(self.centralwidget)
 self.b_pow.setGeometry(QtCore.QRect(290, 260, 71, 71))
 self.b_pow.setObjectName("b_pow")
 self.b_pai = QtWidgets.QPushButton(self.centralwidget)
 self.b_pai.setGeometry(QtCore.QRect(290, 400, 71, 71))
 self.b_pai.setObjectName("b_pai")
 self.b_bra_r = QtWidgets.QPushButton(self.centralwidget)
 self.b_bra_r.setGeometry(QtCore.QRect(290, 330, 71, 71))
 self.b_bra_r.setObjectName("b_bra_r")
 self.l_hist = QtWidgets.QListWidget(self.centralwidget)
 self.l_hist.setGeometry(QtCore.QRect(380, 10, 256, 601))
 self.l_hist.setObjectName("l_hist")
 self.e_view = QtWidgets.QTextEdit(self.centralwidget)
 self.e_view.setGeometry(QtCore.QRect(10, 10, 351, 231))
 font = QtGui.QFont()
 font.setFamily("Adobe Caslon Pro Bold")
 font.setPointSize(22)
 font.setBold(True)
 font.setWeight(75)
 self.e_view.setFont(font)
 self.e_view.setObjectName("e_view")
 self.b_0 = QtWidgets.QPushButton(self.centralwidget)
 self.b_0.setGeometry(QtCore.QRect(80, 540, 71, 71))
 self.b_0.setObjectName("b_0")
 self.b_pt = QtWidgets.QPushButton(self.centralwidget)
 self.b_pt.setGeometry(QtCore.QRect(10, 540, 71, 71))
 self.b_pt.setObjectName("b_pt")
 self.b_del = QtWidgets.QPushButton(self.centralwidget)
 self.b_del.setGeometry(QtCore.QRect(220, 470, 71, 71))
 self.b_del.setObjectName("b_del")
 self.b_clc = QtWidgets.QPushButton(self.centralwidget)
 self.b_clc.setGeometry(QtCore.QRect(290, 470, 71, 71))
 self.b_clc.setObjectName("b_clc")
 MainWindow.setCentralWidget(self.centralwidget)
 self.menubar = QtWidgets.QMenuBar(MainWindow)
 self.menubar.setGeometry(QtCore.QRect(0, 0, 647, 30))
 self.menubar.setObjectName("menubar")
 MainWindow.setMenuBar(self.menubar)
 self.statusbar = QtWidgets.QStatusBar(MainWindow)
 self.statusbar.setObjectName("statusbar")
 MainWindow.setStatusBar(self.statusbar)

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

 def retranslateUi(self, MainWindow):
 _translate = QtCore.QCoreApplication.translate
 MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
 self.b_1.setText(_translate("MainWindow", "1"))
 self.b_2.setText(_translate("MainWindow", "2"))
 self.b_3.setText(_translate("MainWindow", "3"))
 self.b_6.setText(_translate("MainWindow", "6"))
 self.b_4.setText(_translate("MainWindow", "4"))
 self.b_5.setText(_translate("MainWindow", "5"))
 self.b_8.setText(_translate("MainWindow", "8"))
 self.b_9.setText(_translate("MainWindow", "9"))
 self.b_7.setText(_translate("MainWindow", "7"))
 self.b_eq.setText(_translate("MainWindow", "="))
 self.b_mod.setText(_translate("MainWindow", "%"))
 self.b_bra_l.setText(_translate("MainWindow", "("))
 self.b_div.setText(_translate("MainWindow", "/"))
 self.b_add.setText(_translate("MainWindow", "+"))
 self.b_sub.setText(_translate("MainWindow", "-"))
 self.b_mul.setText(_translate("MainWindow", "*"))
 self.b_pow.setText(_translate("MainWindow", "^"))
 self.b_pai.setText(_translate("MainWindow", "π"))
 self.b_bra_r.setText(_translate("MainWindow", ")"))
 self.b_0.setText(_translate("MainWindow", "0"))
 self.b_pt.setText(_translate("MainWindow", "."))
 self.b_del.setText(_translate("MainWindow", "删除"))
 self.b_clc.setText(_translate("MainWindow", "清空"))

主逻辑代码

calc_main.py

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from calc_interface import Ui_MainWindow
import os,sys

global e_view

pluginsPath='PyQt5/Qt/plugins'
if os.path.exists(pluginsPath):#指定插件路径。源码运行时不会生效,打包后运行检测到路径,加载插件
 QApplication.addLibraryPath(pluginsPath)

class MyMainWindow(QMainWindow, Ui_MainWindow):

 def forge_link(self):
 self.b_0.clicked.connect(self.button_event(0))
 self.b_1.clicked.connect(self.button_event(1))
 self.b_2.clicked.connect(self.button_event(2))
 self.b_3.clicked.connect(self.button_event(3))
 self.b_4.clicked.connect(self.button_event(4))
 self.b_5.clicked.connect(self.button_event(5))
 self.b_6.clicked.connect(self.button_event(6))
 self.b_7.clicked.connect(self.button_event(7))
 self.b_8.clicked.connect(self.button_event(8))
 self.b_9.clicked.connect(self.button_event(9))
 self.b_add.clicked.connect(self.button_event('+'))
 self.b_sub.clicked.connect(self.button_event('-'))
 self.b_mul.clicked.connect(self.button_event('*'))
 self.b_div.clicked.connect(self.button_event('/'))
 self.b_pow.clicked.connect(self.button_event('**'))
 self.b_bra_l.clicked.connect(self.button_event('('))
 self.b_bra_r.clicked.connect(self.button_event(')'))
 self.b_mod.clicked.connect(self.button_event('%'))
 self.b_pai.clicked.connect(self.button_event('3.1415926'))
 self.b_pt.clicked.connect(self.button_event('.'))
 self.b_del.clicked.connect(self.delete_event)
 self.b_clc.clicked.connect(self.clear_event)
 self.b_eq.clicked.connect(self.calc_complish)

 def __init__(self, parent=None):
 super(MyMainWindow, self).__init__(parent)
 self.setupUi(self)
 self.forge_link() #连接槽函数

 def button_event(self,arg):
 # print(dir(self.e_view))
 global e_view
 e_view=self.e_view
 def fun(): #返回一个自定义的槽函数
  global e_view
  txt = e_view.toPlainText()
  e_view.setText(txt + str(arg))
 return fun

 def calc_complish(self):
 txt=self.e_view.toPlainText()
 ans=''
 try:
  ans=str(eval(txt))
 except BaseException:
  ans='MathError'
 # print(ans)
 self.clear_event()
 self.e_view.setText(ans)
 self.l_hist.addItem(txt+'='+ans)

 def clear_event(self):
 self.e_view.setText('')

 def delete_event(self):
 txt = self.e_view.toPlainText()
 txt=txt[:len(txt)-1]
 self.e_view.setText(txt)

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python两个整数相除得到浮点数值的方法
Mar 18 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
python数据处理实战(必看篇)
Jun 11 Python
基于python socketserver框架全面解析
Sep 21 Python
使用python实现ANN
Dec 20 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
python3 线性回归验证方法
Jul 09 Python
wxPython电子表格功能wx.grid实例教程
Nov 19 Python
Python基础知识之变量的详解
Apr 14 Python
详解Python requests模块
Jun 21 Python
Python实现简单层次聚类算法以及可视化
Mar 18 #Python
PyQt5实现简单数据标注工具
Mar 18 #Python
Python简单I/O操作示例
Mar 18 #Python
python实现简单图片物体标注工具
Mar 18 #Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 #Python
Python动态赋值的陷阱知识点总结
Mar 17 #Python
Python将字符串常量转化为变量方法总结
Mar 17 #Python
You might like
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php设计模式 Singleton(单例模式)
2011/06/26 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
PHP高并发和大流量解决方案整理
2021/03/09 PHP
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
js实现星星打分效果
2020/07/05 Javascript
介绍Python中的一些高级编程技巧
2015/04/02 Python
python win32 简单操作方法
2017/05/25 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
python缩进长度是否统一
2020/08/02 Python
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
全球性的在线购物网站:Zapals
2017/03/22 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
C语言笔试题
2014/09/04 面试题
小学教师师德整改措施
2014/09/29 职场文书
铁路安全反思材料
2014/12/24 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python