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求crc32值的方法
Oct 05 Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
Python读取xlsx文件的实现方法
Jul 04 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Python中bisect的用法及示例详解
Jul 20 Python
Python将字典转换为XML的方法
Aug 01 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
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
python如何提升爬虫效率
2020/09/27 Python
python 下载文件的几种方法汇总
2021/01/06 Python
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
酒店副总岗位职责
2013/12/24 职场文书
求职意向书
2014/07/29 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2014年教师工作总结
2014/11/10 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
员工家属慰问信
2015/03/24 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
彻底理解golang中什么是nil
2021/04/29 Golang