当前位置: 首页 > news >正文

使用PyQt5设计一款简单的计算器

目录

一、环境配置:

二、代码实现

三、主程序

四、总结


        本文使用PyQt5设计一款简单的计算器,可以通过界面交互实现加减乘除的功能,希望能够给初学者一些帮助。主要涉及的知识点有类的定义与初始化、类的成员函数、pyqt5的信号与槽函数等。

具体界面如下:

一、环境配置:

使用pip指令安装pyqt5,此处选择5.12.0版本,因为笔者安装的spyder版本为4.1.5,过高的版本不兼容:

pip install PyQt5==5.12.0 -i https://pypi.douban.com/simple
pip install PyQt5-tools -i https://pypi.douban.com/simple
pip install PyQt5designer -i https://pypi.douban.com/simple

二、代码实现

1、引入依赖库。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QLineEdit, QPushButton
from PyQt5.QtCore import Qt

2、定义计算器(Calculator)类,成员函数的功能如下表所示。

函数名称函数功能

__init__()

初始化函数,初始化窗口名称、尺寸、按钮名称、位置、信号响应函数等。

button_click(self, number)

选择数字与小数点

button_clear(self)

实现屏幕以及缓存清空的功能

button_add(self)

实现两个数相加的功能

button_subtract(self)

实现两个数相减的功能

button_multiply(self)

实现两个数相乘的功能

button_divide(self)

实现两个数相除的功能

button_equal(self)

首先判断执行的运算操作,调用对应的函数进行计算,并将结果显示在文本框中
class Calculator(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("计算器")self.setFixedSize(300, 350)   # 固定窗口大小central_widget = QWidget(self)self.setCentralWidget(central_widget)main_layout = QGridLayout()central_widget.setLayout(main_layout)# 添加文本框self.screen = QLineEdit()self.screen.setFixedHeight(40)self.screen.setAlignment(Qt.AlignRight)self.screen.setReadOnly(True)main_layout.addWidget(self.screen, 0, 0, 1, 4)# 添加按钮button_1 = QPushButton("1", clicked=lambda: self.button_click("1"))button_2 = QPushButton("2", clicked=lambda: self.button_click("2"))button_3 = QPushButton("3", clicked=lambda: self.button_click("3"))button_4 = QPushButton("4", clicked=lambda: self.button_click("4"))button_5 = QPushButton("5", clicked=lambda: self.button_click("5"))button_6 = QPushButton("6", clicked=lambda: self.button_click("6"))button_7 = QPushButton("7", clicked=lambda: self.button_click("7"))button_8 = QPushButton("8", clicked=lambda: self.button_click("8"))button_9 = QPushButton("9", clicked=lambda: self.button_click("9"))button_0 = QPushButton("0", clicked=lambda: self.button_click("0"))button_add = QPushButton("+", clicked=self.button_add)button_subtract = QPushButton("-", clicked=self.button_subtract)button_multiply = QPushButton("*", clicked=self.button_multiply)button_divide = QPushButton("/", clicked=self.button_divide)button_clear = QPushButton("清除", clicked=self.button_clear)button_equal = QPushButton("=", clicked=self.button_equal)main_layout.addWidget(button_7, 1, 0)main_layout.addWidget(button_8, 1, 1)main_layout.addWidget(button_9, 1, 2)main_layout.addWidget(button_divide, 1, 3)main_layout.addWidget(button_4, 2, 0)main_layout.addWidget(button_5, 2, 1)main_layout.addWidget(button_6, 2, 2)main_layout.addWidget(button_multiply, 2, 3)main_layout.addWidget(button_1, 3, 0)main_layout.addWidget(button_2, 3, 1)main_layout.addWidget(button_3, 3, 2)main_layout.addWidget(button_subtract, 3, 3)main_layout.addWidget(button_0, 4, 0)main_layout.addWidget(button_clear, 4, 1, 1, 2)main_layout.addWidget(button_add, 4, 3)main_layout.addWidget(button_equal, 5, 0, 1, 4)# 初始化变量self.first_num = Noneself.operation = Nonedef button_click(self, number):current = self.screen.text()self.screen.setText(current + number)def button_clear(self):self.screen.clear()self.first_num = Noneself.operation = Nonedef button_add(self):self.first_num = float(self.screen.text())self.screen.clear()self.operation = "add"def button_subtract(self):self.first_num = float(self.screen.text())self.screen.clear()self.operation = "subtract"def button_multiply(self):self.first_num = float(self.screen.text())self.screen.clear()self.operation = "multiply"def button_divide(self):self.first_num = float(self.screen.text())self.screen.clear()self.operation = "divide"def button_equal(self):second_num = float(self.screen.text())self.screen.clear()if self.operation == "add":result = self.first_num + second_numelif self.operation == "subtract":result = self.first_num - second_numelif self.operation == "multiply":result = self.first_num * second_numelif self.operation == "divide":if second_num == 0:result = "除数不能为 0"else:result = self.first_num / second_numself.screen.setText(str(result))

三、主程序

主程序首先创建窗口对象,接着创建计算器对象并显示窗口,最后设定终止条件。

if __name__ == "__main__":app = QApplication(sys.argv)calc = Calculator()calc.show()sys.exit(app.exec_())

四、总结

这个计算器的优点:

  • 采用了PyQt5模块和Python语言进行设计,实现较为简单,易于理解和修改。
  • 可以进行基本运算操作,包括加、减、乘、除等。

这个计算器的缺点:

  • 功能较为简单,只能进行基础的数学运算,无任何高级功能。
  • 输入输出仅支持数字和基本的加减乘除运算符号,不支持其他字符、函数或变量。
  • 在除数为0时无法做出错误提示,故看起来好像可以除以0一样。

综上所述,该计算器适合作为一个小型的实验项目或界面设计入门示例,但是并不够强大,不能满足更多复杂应用场景的需求。

相关文章:

使用PyQt5设计一款简单的计算器

目录 一、环境配置: 二、代码实现 三、主程序 四、总结 本文使用PyQt5设计一款简单的计算器,可以通过界面交互实现加减乘除的功能,希望能够给初学者一些帮助。主要涉及的知识点有类的定义与初始化、类的成员函数、pyqt5的信号与槽函数等。…...

Htop使用说明

目录 引言 什么是htop htop安装 htop界面介绍 htop功能介绍 引言 我们使用服务器的时候常常需要关注下自己的程序资源占用情况,htop就是一种互动式的进程查查看器,整齐用下来感觉比top的逼格高,造作可视化都更方便些,我觉得还…...

PostgreSQL Linux安装

安装依赖: sudo yum -y install readline-devel zlib-devel 安装Postgres: ssh hadoophadoop001 #下载Postgres wget https://ftp.postgresql.org/pub/source/v14.2/postgresql-14.2.tar.gz tar -zxvf postgresql-14.2.tar.gz -C /data #编译前准备 /dat…...

亚商投资顾问 早餐FM/0509车辆电动化

01/亚商投资顾问 早间导读 1.上交所拟于5月11日举办“发现央企投资价值,促进央企估值回归”交流会 2.监管部门十方面举措加强房地产经纪行业管理 3.广东:推动城市公共服务及货运配送车辆电动化替代 4.昆山两楼盘因大幅降价被暂停网签:降幅…...

AI绘画天花板——Midjourney注册使用保姆级教程(5月5日验证有效)

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我,备注:aigc,拉你进群。 现在市面上AI绘图大概有三大阵营:Midjourney、Stable Diffusion,还有一个就是OpenAI实…...

学习笔记(2)项目结构描述 - manifest.json和pages.json

目录 1,manifest.json2,pages.json2.1,pages2.2,globalStyle2.3,tabBar 1,manifest.json 官方详情 uni-app 的 appid 由 DCloud 云端分配,主要用于 DCloud 相关的云服务,请勿自行修…...

vector、deque、list相关知识点

vector erase返回迭代器指向删除元素后的元素insert返回迭代器指插入的元素reserve只给容器底层开指定大小内存空间,并不添加新元素 deque 底层数据结构 动态开辟的二维数组,一维数组从2开始,以2倍方式扩容,每次扩容和&#x…...

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比 目录 多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比预测效果基本介绍程序设计学习总结参考资料 预测效果 基本介绍 多维时序 …...

设计模式——适配器模式(类适配器、对象适配器)

是什么? 我们平时的有线耳机接口分为USB的和Type-C的接口,但是手机的耳机插口却只有一个,像华为的耳机插口现在基本都是Type-c的,那如果我们现在只有USB接口的耳机怎么办呢,这个时候就需要使用到一个转换器&#xff0c…...

iOS开发多target

场景 背景:设想一下有一个场景,一个业务分为多种身份,他们大部分功能是相同的,但是也有自己的差异性。这种情况,想要构建出不同身份的APP。你会怎么做??? 当然,你可以拷贝一份代码出来,给项目重新命名。这样做的好处是,他们互相不会冲突,不用去关心是否有逻辑的冲…...

100种思维模型之每日评估思维模型-58

曾子曰:吾日三省吾省,为人谋而不忠乎?与朋友交不信乎?传不习乎? 曾国藩,坚持每日写复盘日记,最后他用自己的实践经历向我们证明:一个智商很平庸、出身很普通且有着各种毛病的人&…...

libreoffice api

libreOffice API是用于访问libreOffice的编程接口。可以使用libreOffice API创建、打开、修改和打印libreOffice文档。 LibreOffice API支持Basic、Java、C/C、Javascript、Python语言。 这是通过一种称为通用网络对象 (Universal Network Objects, UNO) 的技术实现的&#xff…...

全网最火,Web自动化测试驱动模型详全,一语点通超实用...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试模型&a…...

如何写软件测试简历项目经验,靠这个面试都要赶场

一、前言:浅谈面试 面试是我们进入一个公司的门槛,通过了面试才能进入公司,你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试,得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来看看吧。这里分享一…...

【Linux】Linux下安装Mysql(图文解说详细版)

文章目录 前言第一步,进到opt文件夹下面,为什么?因为opt文件夹相当于Windows下的D://software第二步,用yum安装第三步,设置mysql的相关配置第四步,设置远程连接。第五步,更改mysql的语言第六步&…...

Cookie和Session的API、登录页面

目录 一、Cookie 和 Session 1、HttpServletRequest 类中的相关方法 2、HttpServletResponse 类中的相关方法 3、HttpSession 类中的相关方法 4、Cookie 类中的相关方法 二、网页登录 1、约定前后端交互接口 2、编写一个简单的登录页面 3、编写一个Servlet 来处理这个…...

C++数据结构:手撕红黑树

目录 一. 红黑树的概念及结构 二. 红黑树节点的定义 三. 红黑树节点的插入 3.1 初步查找插入节点的位置并插入节点 3.2 红黑树结构的调整 3.3 红黑树节点插入完整版代码 四. 红黑树的结构检查 4.1 检查是否为搜索树 4.2 检查节点颜色是否满足要求 附录:红黑…...

Spring IoC 深度学习

Io回顾 IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Jav…...

C语言从入门到精通第17天(指针和数组联用)

指针和数组联用 不同类型指针变量之间的区别数组的指针指针数组 不同类型指针变量之间的区别 在了解数组和指针联用之前,我们先对指针变量进行补充。我们对比一下int *p1和char *p2的区别? 相同点: 都是指针变量都是用来保存一个内存地址编…...

Android9.0 原生系统SystemUI下拉状态栏和通知栏视图之锁屏通知布局

1.前言 在9.0的系统rom定制化开发中,对于系统原生systemui的锁屏界面的功能也是非常重要的,所以在锁屏页面布局中,也是有通知栏布局的,所以接下来对于息屏亮屏 通知栏布局的相关流程分析,看下亮屏后锁屏页面做了哪些功能 2.原生系统SystemUI下拉状态栏和通知栏视图之锁…...

音视频八股文(10)-- mp4结构

介绍 mp4⽂件格式⼜被称为MPEG-4 Part 14,出⾃MPEG-4标准第14部分 。它是⼀种多媒体格式容器,⼴泛⽤于包装视频和⾳频数据流、海报、字幕和元数据等。(顺便⼀提,⽬前流⾏的视频编码格式AVC/H264 定义在MPEG-4 Part 10&#xff09…...

python算法中的深度学习算法之深度信念网络(详解)

目录 学习目标: 学习内容: 深度信念网络 Ⅰ. 预训练 Ⅱ. 微调 学习目标: 一分钟掌握 python算法中的深度学习算法之深度信念网络 入门知识...

SPSS如何绘制常用统计图之案例实训?

文章目录 0.引言1.绘制简单条形图2.绘制分类条形图3.绘制分段条形图4.绘制简单线图5.绘制多重线图6.绘制垂直线图7.绘制简单面积图8.绘制堆积面积图9.绘制饼图10.绘制直方图11.绘制简单散点图12.绘制重叠散点图13.绘制矩阵散点图14.绘制三维散点图15.绘制简单箱图16.绘制分类箱…...

打动人心的故事 | 如何利用文案在Facebook上塑造品牌形象

在当今的数字营销时代,文案已经成为各大平台上不可或缺的元素之一。在Facebook上,一个好的文案能够为品牌带来巨大的曝光率和用户黏性,甚至可以改变用户对品牌的看法。那么,如何利用文案在Facebook上打动人心,塑造品牌…...

什么是模糊控制?

模糊控制设计原理 1、传统控制系统和模糊控制系统 传统控制系统结构: 控制目的:通过控制器调节控制信号u,使输出信号y达到要求 模糊控制系统结构: 与传统控制系统的差异:用模糊控制器FC(Fuzzy Controller&…...

仿抖音开发需要注意的问题

一、版权问题 仿抖音开发需要注意版权问题,包括内容的版权和软件的版权。在开发的过程中,不要直接抄袭他人的作品,应该注重保护知识产权。 二、安全性问题 仿抖音开发需要重视应用的安全性问题,避免应用在使用过程中发生安全漏…...

如何根据期刊缩写查找期刊?

英文论文写作中,经常会插入参考文献。参考文献中的期刊名称,时常需要使用缩写。或者是手头有期刊缩写后的名称,但是有时候,查了半天也查不到期刊期刊全称,费时费力让人崩溃。今天就给各位学者老师总结一些查询期刊缩写…...

数据发送流程

在发送模式下,UART 的串行数据发送电路主要包括一个发送移位寄存器(TSR),TSR 功能是将数据 逐个移位送出。待发数据必须先写到发送缓冲区中。 TXIFx 是发送中断标志位,可配置为发送缓冲区空或TSR 空。 数据的发送支持7bit 、8bit 或9bit 数据…...

堆及其应用

堆是一种基于树结构的数据结构,通常用于实现优先队列。堆分为最大堆和最小堆两种类型,最大堆的每个节点的值都大于等于其子节点的值,最小堆则相反,每个节点的值都小于等于其子节点的值。 基础算法操作包括: 1. 插入元…...

MySQL数据库备份脚本

PS:此脚本简单易懂,根据实际情况修改个别参数测试后即可使用,如有错误请指出! 1.MySQL数据库备份脚本 #!/bin/bashuser pw ip dateYdate "%Y" date2date "%Y%m%d" date3date "%Y%m%d %H:%M" date…...

wordpress前台漏洞/郑州网络营销哪家正规

一、Wordcount练习 1.需求:通过hadoop分析文件中单词总数 1.要被分析的文件内容如图所示,每个单词之间以空格分开 2.实现的效果如图 2.代码实现 1.解决数据倾斜问题 考虑到在机器运行过程中 Reduce阶段每个相同的Key会由一个ReduceTask来处理,而java共有十六万个,其他的单词只有…...

wordpress 开启多用户/重庆网络seo公司

转载:https://blog.csdn.net/guyuebingchuan/article/details/19620487 1.在同一个网络内,连接电视的命令行: su stop adbd setprop service.adb.tcp.port 5555 start adbd adb connect 10.120.158.21 2.在一根网线时连接电视的命令行: 1.首…...

哪个网站能在百度做推广/今日国际新闻头条新闻

文章目录前言概述二、正文forEach2.mapfiltereverysomereducefindfindIndex总结前言 我个人而言数组的遍历方法是常用到的,每次用我都现搜,所以还是自己整理一下吧。若有术语不当之处,欢迎指出。 概述 我主要列出的是封装好的数组遍历方法&a…...

网站做收录是什么意思/域名权重查询工具

JavaScript之继承什么是继承继承方式属性拷贝原型式继承原型链继承借用构造函数组合继承借用构造函数 深拷贝以下内容转载编辑自LiYajie 什么是继承 js中的继承就是获取存在对象已有属性和方法的一种方式. 继承方式 属性拷贝 就是将对象的成员复制一份给需要继承的对象. …...

北京房山网站建设产品更新培训/广州seo服务

文章目录参考资料1. 问题描述2. 解决方案2.1 将tensorflow降版本2.2 升级python版本参考资料 https://github.com/tensorflow/tensorflow/issues/55440 1. 问题描述 今天我在anaconda虚拟环境中安装好pytorch和tensorflow2.8的gpu版本后,在测试能否使用时报了以下…...

wordpress 主题 主机/seo的工作流程

x目录 一,漏桶算法 二,令牌桶算法 三,基于Filter的限流 3.1 环境搭建 3.2 启动redis 3.3 配置KeyResolver 3.4 测试 一,漏桶算法 漏桶算法可以很好地限制容量池的大小,从而防止流量暴增。漏桶可以看作是一个带有常…...