0

0

python通过PyQt5和Eric6制作简单计算器

Y2J

Y2J

发布时间:2017-05-15 11:21:03

|

3276人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了python3.5 + pyqt5 +eric6 实现的一个计算器代码,在windows7 32位系统可以完美运行 计算器,有兴趣的可以了解一下。

目前可以实现简单的计算。计算前请重置,设计的时候默认数字是0,学了半天就做出来个这么个结果,bug不少。 python3.5 + PyQt5 +Eric6 在windows7 32位系统可以完美运行 计算器,简单学了半天就画个图实现的存在bug,部分按钮还未实现,后续优化。

代码结构如图:

 

jisuan.py

立即学习Python免费学习笔记(深入)”;


import re
#匹配整数或小数的乘除法,包括了开头存在减号的情况
mul_p=re.compile("(-?\d+)(\.\d+)?(\*|/)(-?\d+)(\.\d+)?")
#匹配整数或小数的加减法,包括了开头存在减号的情况
plus_minus = re.compile("(-?\d+)(\.\d+)?(-|\+)(-?\d+)(\.\d+)?")
#匹配括号
bracket=re.compile("\([^()]*\)")
#匹配乘法的时候出现乘以负数的情况,包括了开头存在减号的情况
mul_minus_minus = re.compile("(-?\d+)(\.\d+)?(\*-)(\d+)(\.\d+)?")
#匹配除法的时候出现乘以负数的情况,包括了开头存在减号的情况
p_minus_minus = re.compile("(-?\d+)(\.\d+)?(/-)(\d+)(\.\d+)?")
#定义一个两位数的加减乘除法的运算,匹配左边的右边的数字和左边的数字,然后进行计算
def touble_cale(str_expire):
  if str_expire.count("+") == 1:
    right_num = float(str_expire[(str_expire.find("+")+1):])
    left_num = float(str_expire[:str_expire.find("+")])
    return str(right_num+left_num)
  elif str_expire[1:].count("-") == 1:
    right_num = float(str_expire[:str_expire.find("-",1)])
    left_num = float(str_expire[(str_expire.find("-", 1) + 1):])
    return str(right_num - left_num)
  elif str_expire.count("*") == 1:
    right_num = float(str_expire[:str_expire.find("*")])
    left_num = float(str_expire[(str_expire.find("*")+1):])
    return str(right_num * left_num)
  elif str_expire.count("/") == 1:
    right_num = float(str_expire[:str_expire.find("/")])
    left_num = float(str_expire[(str_expire.find("/") + 1):])
    return str(right_num / left_num)


#定义一个方法用于判断是否存在乘以负数和除以负数的情况
def judge_mul_minus(str_expire):
  #判断公式中乘以负数的部分
  if len(re.findall("(\*-)", str_expire)) != 0:
    #调用上面的正则取得*-的公式
    temp_mul_minus = mul_minus_minus.search(str_expire).group()
    #将匹配的部分的*-换成*并将-放到前面
    temp_mul_minus_2 = temp_mul_minus.replace(temp_mul_minus,"-" + temp_mul_minus.replace("*-","*"))
    #经更改的的部分与原来的部分进行替换
    str_expire=str_expire.replace(temp_mul_minus,temp_mul_minus_2)
    return judge_mul_minus(str_expire)
    #return str_expire
  # 判断公式中除以负数的部分
  elif len(re.findall(r"(/-)", str_expire)) != 0:
    # 调用上面的正则取得/-的公式
    temp_dev_minus = p_minus_minus.search(str_expire).group()
    # 将匹配的部分的/-换成/并将-放到前面
    temp_dev_minus_2 = temp_dev_minus.replace(temp_dev_minus,"-" + temp_dev_minus.replace("/-","/"))
    # 经更改的的部分与原来的部分进行替换
    str_expire = str_expire.replace(temp_dev_minus,temp_dev_minus_2)
    return judge_mul_minus(str_expire)
  #调用change_sign将公式中的++换成= +-换成-
  return change_sign(str_expire)

#定义一个方法取将--更改为+ +-改为-
def change_sign(str_expire):
  if len(re.findall(r"(\+-)", str_expire)) != 0:
    str_expire = str_expire.replace("+-", "-")
    return change_sign(str_expire)
  elif len(re.findall(r"(--)", str_expire)) != 0:
    str_expire = str_expire.replace("--", "+")
    return change_sign(str_expire)
  return str_expire


#定义一个方法用于计算只有加减乘除的公式,优先处理乘法
def cale_mix(str_expire):
  #如果公式中出现符号数字的情况即+5 -6 *8 /8的这种情况直接放回数字否则则先计算乘除在处理加减
  while len(re.findall("[-+*/]",str_expire[1:])) != 0:
    if len(re.findall("(\*|/)",str_expire)) != 0:
      str_expire = str_expire.replace(mul_p.search(str_expire).group(),touble_cale(mul_p.search(str_expire).group()))
    elif len(re.findall("(\+|-)",str_expire)) !=0:
      str_expire = str_expire.replace(plus_minus.search(str_expire).group(),touble_cale(plus_minus.search(str_expire).group()))
  return str_expire

#定义一个方法用于去括号,并调用上述的方法进行计算
def remove_bracket(str_expire):
  #判断公式中是否有括号
  if len(bracket.findall(str_expire)) == 0:
    return cale_mix(judge_mul_minus(str_expire))
  elif len(bracket.findall(str_expire))!=0:
    while len(bracket.findall(str_expire)) !=0:
      #print(bracket.search(str_expire).group())
      #只有存在括号优先处理括号中的内容并对内容进行替换,直到没有括号位置
      str_expire = str_expire.replace(bracket.search(str_expire).group(),cale_mix(judge_mul_minus(bracket.search(str_expire).group()[1:-1])))
    str_expire = cale_mix(judge_mul_minus(str_expire))
    return str_expire
if name == "main":
  while True:
    user_input_expire = input("请输入你的公式:(不要带空格,q表示退出):")
    print("%s=%s" %(user_input_expire,remove_bracket(user_input_expire)))
    continue

untitled.py

# -*- coding: utf-8 -*-
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets
from Ui_untitled import Ui_Dialog
from jisuan import remove_bracket
class Dialog(QDialog, Ui_Dialog):
  def init(self, parent=None):
    super(Dialog, self).init(parent)
    self.setupUi(self)
  @pyqtSlot()
  def on_Button_6_clicked(self):
    self.Edit_xianshi.insertPlainText('6')
  @pyqtSlot()
  def on_Button_2_clicked(self):
    self.Edit_xianshi.insertPlainText('2')
  @pyqtSlot()
  def on_Button_3_clicked(self):
    self.Edit_xianshi.insertPlainText('3')
  @pyqtSlot()
  def on_Button_pingfang_clicked(self):
    me=self.Edit_xianshi.toPlainText()
    m=int(me) *int(me)
    self.Edit_xianshi.clear()
    self.Edit_xianshi.append(str(m))
  @pyqtSlot()
  def on_Button_add_clicked(self):
    h=self.Edit_xianshi.toPlainText()
    self.Edit_xianshi.clear()
    self.Edit_xianshi.append(h+'+')
  @pyqtSlot()
  def on_Button_jian_clicked(self):
    h = self.Edit_xianshi.toPlainText()
    self.Edit_xianshi.clear()
    self.Edit_xianshi.append(h + '-')
  @pyqtSlot()
  def on_Button_9_clicked(self):
    self.Edit_xianshi.insertPlainText('9')
  @pyqtSlot()
  def on_Button_chu_clicked(self):
    h = self.Edit_xianshi.toPlainText()
    self.Edit_xianshi.clear()
    self.Edit_xianshi.append(h + '/')
  @pyqtSlot()
  def on_Button_cheng_clicked(self):
    h = self.Edit_xianshi.toPlainText()
    self.Edit_xianshi.clear()
    self.Edit_xianshi.append(h + '*')
  @pyqtSlot()
  def on_Button_8_clicked(self):
    self.Edit_xianshi.insertPlainText('8')
  @pyqtSlot()
  def on_Button_4_clicked(self):
    self.Edit_xianshi.insertPlainText('4')
  @pyqtSlot()
  def on_Button_esc_clicked(self):
    self.Edit_xianshi.clear()
  @pyqtSlot()
  def on_Button_7_clicked(self):
    self.Edit_xianshi.insertPlainText('7')
  @pyqtSlot()
  def on_Button_1_clicked(self):
    self.Edit_xianshi.insertPlainText('1')
  @pyqtSlot()
  def on_Button_5_clicked(self):
    self.Edit_xianshi.insertPlainText('5')
  @pyqtSlot()
  def on_Button_xiaoshu_clicked(self):
    self.Edit_xianshi.insertPlainText('.')
  @pyqtSlot()
  def on_Button_0_clicked(self):
    self.Edit_xianshi.insertPlainText('0')
  @pyqtSlot()
  def on_Button_dengyu_clicked(self):
    pe=self.Edit_xianshi.toPlainText()
    m=remove_bracket(pe)
    self.Edit_xianshi.clear()
    self.Edit_xianshi.append(str(m))

  def on_Button_fenzhi_clicked(self):
    pe = self.Edit_xianshi.toPlainText()
    if int(pe) ==0:
      QMessageBox.information(self,u'提示',u'零不能作为分母')
      Dialog()
    else:
      m=1/(int(pe))
      self.Edit_xianshi.clear()
      self.Edit_xianshi.append(str(m))
      Dialog()
if name =="main":
  import sys
  app = QtWidgets.QApplication(sys.argv)
  app.processEvents()
  ui = Dialog()
  ui.show()

  sys.exit(app.exec_())

Ui_untitled.py

PLC编程入门基础知识 中文doc版
PLC编程入门基础知识 中文doc版

可编程序控制器,英文称Programmable Controller,简称PC。但由于PC容易和个人计算机(Personal Computer)混淆,故人们仍习惯地用PLC作为可编程序控制器的缩写。它是一个以微处理器为核心的数字运算操作的电子系统装置,专为在工业现场应用而设计,它采用可编程序的存储器,用以在其内部存储执行逻辑运算、顺序控制、定时/计数和算术运算等操作指令,并通过数字式或模拟式的输入、输出接口,控制各种类型的机械或生产过程。本平台提供PLC编程入门基础知识下载,需要的朋友们下载看看吧!

下载
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'C:\Users\Administrator\Desktop\pyqt5\untitled.ui'
#
# Created by: PyQt5 UI code generator 5.5
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
  def setupUi(self, Dialog):
    Dialog.setObjectName("Dialog")
    Dialog.resize(357, 320)
    Dialog.setStyleSheet("font: 75 16pt \"Aharoni\";\n"
"background-color: rgb(206, 255, 251);")
    self.label = QtWidgets.QLabel(Dialog)
    self.label.setGeometry(QtCore.QRect(201, 210, 301, 21))
    self.label.setText("")
    self.label.setObjectName("label")
    self.Edit_xianshi = QtWidgets.QTextEdit(Dialog)
    self.Edit_xianshi.setGeometry(QtCore.QRect(0, 0, 351, 41))
    self.Edit_xianshi.setStyleSheet("font: 75 16pt \"Aharoni\";")
    self.Edit_xianshi.setObjectName("Edit_xianshi")
    self.gridLayoutWidget = QtWidgets.QWidget(Dialog)
    self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 30, 351, 281))
    self.gridLayoutWidget.setObjectName("gridLayoutWidget")
    self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
    self.gridLayout.setObjectName("gridLayout")
    self.Button_6 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_6.setObjectName("Button_6")
    self.gridLayout.addWidget(self.Button_6, 2, 2, 1, 1)
    self.Button_2 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_2.setObjectName("Button_2")
    self.gridLayout.addWidget(self.Button_2, 3, 1, 1, 1)
    self.Button_3 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_3.setObjectName("Button_3")
    self.gridLayout.addWidget(self.Button_3, 3, 2, 1, 1)
    self.Button_fenzhi = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_fenzhi.setObjectName("Button_fenzhi")
    self.gridLayout.addWidget(self.Button_fenzhi, 1, 3, 1, 1)
    self.Button_pingfang = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_pingfang.setObjectName("Button_pingfang")
    self.gridLayout.addWidget(self.Button_pingfang, 0, 3, 1, 1)
    self.Button_add = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_add.setObjectName("Button_add")
    self.gridLayout.addWidget(self.Button_add, 2, 3, 1, 1)
    self.Button_jian = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_jian.setObjectName("Button_jian")
    self.gridLayout.addWidget(self.Button_jian, 3, 3, 1, 1)
    self.Button_9 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_9.setObjectName("Button_9")
    self.gridLayout.addWidget(self.Button_9, 1, 2, 1, 1)
    self.Button_chu = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_chu.setObjectName("Button_chu")
    self.gridLayout.addWidget(self.Button_chu, 0, 2, 1, 1)
    self.Button_cheng = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_cheng.setObjectName("Button_cheng")
    self.gridLayout.addWidget(self.Button_cheng, 0, 1, 1, 1)
    self.Button_8 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_8.setObjectName("Button_8")
    self.gridLayout.addWidget(self.Button_8, 1, 1, 1, 1)
    self.Button_4 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_4.setObjectName("Button_4")
    self.gridLayout.addWidget(self.Button_4, 2, 0, 1, 1)
    self.Button_esc = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_esc.setObjectName("Button_esc")
    self.gridLayout.addWidget(self.Button_esc, 0, 0, 1, 1)
    self.Button_7 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_7.setObjectName("Button_7")
    self.gridLayout.addWidget(self.Button_7, 1, 0, 1, 1)
    self.Button_1 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_1.setObjectName("Button_1")
    self.gridLayout.addWidget(self.Button_1, 3, 0, 1, 1)
    self.Button_5 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_5.setObjectName("Button_5")
    self.gridLayout.addWidget(self.Button_5, 2, 1, 1, 1)
    self.pushButton_17 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.pushButton_17.setText("")
    self.pushButton_17.setObjectName("pushButton_17")
    self.gridLayout.addWidget(self.pushButton_17, 4, 0, 1, 1)
    self.Button_xiaoshu = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_xiaoshu.setObjectName("Button_xiaoshu")
    self.gridLayout.addWidget(self.Button_xiaoshu, 4, 1, 1, 1)
    self.Button_0 = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_0.setStyleSheet("")
    self.Button_0.setObjectName("Button_0")
    self.gridLayout.addWidget(self.Button_0, 4, 2, 1, 1)
    self.Button_dengyu = QtWidgets.QPushButton(self.gridLayoutWidget)
    self.Button_dengyu.setObjectName("Button_dengyu")
    self.gridLayout.addWidget(self.Button_dengyu, 4, 3, 1, 1)

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

  def retranslateUi(self, Dialog):
    _translate = QtCore.QCoreApplication.translate
    Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
    self.Edit_xianshi.setHtml(_translate("Dialog", "\n"
"\n"
"

0

")) self.Button_6.setText(_translate("Dialog", "6")) self.Button_2.setText(_translate("Dialog", "2")) self.Button_3.setText(_translate("Dialog", "3")) self.Button_fenzhi.setText(_translate("Dialog", "1/^")) self.Button_pingfang.setText(_translate("Dialog", "^2")) self.Button_add.setText(_translate("Dialog", "+")) self.Button_jian.setText(_translate("Dialog", "-")) self.Button_9.setText(_translate("Dialog", "9")) self.Button_chu.setText(_translate("Dialog", "/")) self.Button_cheng.setText(_translate("Dialog", "*")) self.Button_8.setText(_translate("Dialog", "8")) self.Button_4.setText(_translate("Dialog", "4")) self.Button_esc.setText(_translate("Dialog", "esc")) self.Button_7.setText(_translate("Dialog", "7")) self.Button_1.setText(_translate("Dialog", "1")) self.Button_5.setText(_translate("Dialog", "5")) self.Button_xiaoshu.setText(_translate("Dialog", ".")) self.Button_0.setText(_translate("Dialog", "0")) self.Button_dengyu.setText(_translate("Dialog", "=")) if name == "main": import sys app = QtWidgets.QApplication(sys.argv) Dialog = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_())

效果图:

【相关推荐】

1. 特别推荐:“php程序员工具箱”V0.1版本下载

2. Python免费视频教程

3. Python在数据科学中的应用视频教程

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 序列化
Python 序列化

本专题整合了python序列化、反序列化相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.02

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

91

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

27

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

11

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

5

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

5

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

62

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

55

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

27

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号