Python项目——计算器(PySide6+Pyinstaller)
1、介绍
- 使用python编写一个计算器,可以实现基本的运算。

- 【注】该项目最终还有一些细小的bug没有完善,例如符号可以一直输入。
2、实现
- 使用pyCharm创建一个新的项目。
2.1、设计UI
- 使用Qt designer设计一个UI界面,保存ui文件,再转换为py文件并保存到项目目录中,供后续使用。

- 具体方法:Pyside6入门教学——编写一个UI界面并显示-CSDN博客
- 生成的py文件如下:
-
# -*- coding: utf-8 -*-################################################################################ ## Form generated from reading UI file 'untitled.ui' ## ## Created by: Qt User Interface Compiler version 6.6.1 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,QMetaObject, QObject, QPoint, QRect,QSize, QTime, QUrl, Qt) from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,QFont, QFontDatabase, QGradient, QIcon,QImage, QKeySequence, QLinearGradient, QPainter,QPalette, QPixmap, QRadialGradient, QTransform) from PySide6.QtWidgets import (QApplication, QLineEdit, QMainWindow, QMenuBar,QPushButton, QSizePolicy, QStatusBar, QWidget)class Ui_MainWindow(object):def setupUi(self, MainWindow):if not MainWindow.objectName():MainWindow.setObjectName(u"MainWindow")MainWindow.resize(300, 350)MainWindow.setMinimumSize(QSize(300, 350))MainWindow.setMaximumSize(QSize(300, 350))self.centralwidget = QWidget(MainWindow)self.centralwidget.setObjectName(u"centralwidget")self.lineEdit = QLineEdit(self.centralwidget)self.lineEdit.setObjectName(u"lineEdit")self.lineEdit.setGeometry(QRect(30, 20, 241, 41))self.lineEdit.setMinimumSize(QSize(0, 0))self.lineEdit.setReadOnly(True)self.seven = QPushButton(self.centralwidget)self.seven.setObjectName(u"seven")self.seven.setGeometry(QRect(30, 130, 51, 41))self.eight = QPushButton(self.centralwidget)self.eight.setObjectName(u"eight")self.eight.setGeometry(QRect(90, 130, 51, 41))self.nine = QPushButton(self.centralwidget)self.nine.setObjectName(u"nine")self.nine.setGeometry(QRect(150, 130, 51, 41))self.exc = QPushButton(self.centralwidget)self.exc.setObjectName(u"exc")self.exc.setGeometry(QRect(210, 130, 61, 41))self.six = QPushButton(self.centralwidget)self.six.setObjectName(u"six")self.six.setGeometry(QRect(150, 180, 51, 41))self.four = QPushButton(self.centralwidget)self.four.setObjectName(u"four")self.four.setGeometry(QRect(30, 180, 51, 41))self.mul = QPushButton(self.centralwidget)self.mul.setObjectName(u"mul")self.mul.setGeometry(QRect(210, 180, 61, 41))self.five = QPushButton(self.centralwidget)self.five.setObjectName(u"five")self.five.setGeometry(QRect(90, 180, 51, 41))self.three = QPushButton(self.centralwidget)self.three.setObjectName(u"three")self.three.setGeometry(QRect(150, 230, 51, 41))self.one = QPushButton(self.centralwidget)self.one.setObjectName(u"one")self.one.setGeometry(QRect(30, 230, 51, 41))self.sub = QPushButton(self.centralwidget)self.sub.setObjectName(u"sub")self.sub.setGeometry(QRect(210, 230, 61, 41))self.two = QPushButton(self.centralwidget)self.two.setObjectName(u"two")self.two.setGeometry(QRect(90, 230, 51, 41))self.equal = QPushButton(self.centralwidget)self.equal.setObjectName(u"equal")self.equal.setGeometry(QRect(150, 280, 51, 41))self.zero = QPushButton(self.centralwidget)self.zero.setObjectName(u"zero")self.zero.setGeometry(QRect(30, 280, 51, 41))self.add = QPushButton(self.centralwidget)self.add.setObjectName(u"add")self.add.setGeometry(QRect(210, 280, 61, 41))self.point = QPushButton(self.centralwidget)self.point.setObjectName(u"point")self.point.setGeometry(QRect(90, 280, 51, 41))self.clear = QPushButton(self.centralwidget)self.clear.setObjectName(u"clear")self.clear.setGeometry(QRect(30, 80, 111, 41))self.back = QPushButton(self.centralwidget)self.back.setObjectName(u"back")self.back.setGeometry(QRect(210, 80, 61, 41))MainWindow.setCentralWidget(self.centralwidget)self.menubar = QMenuBar(MainWindow)self.menubar.setObjectName(u"menubar")self.menubar.setGeometry(QRect(0, 0, 300, 21))MainWindow.setMenuBar(self.menubar)self.statusbar = QStatusBar(MainWindow)self.statusbar.setObjectName(u"statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QMetaObject.connectSlotsByName(MainWindow)# setupUidef retranslateUi(self, MainWindow):MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"\u8ba1\u7b97\u5668", None))self.seven.setText(QCoreApplication.translate("MainWindow", u"7", None))self.eight.setText(QCoreApplication.translate("MainWindow", u"8", None))self.nine.setText(QCoreApplication.translate("MainWindow", u"9", None))self.exc.setText(QCoreApplication.translate("MainWindow", u"\u00f7", None))self.six.setText(QCoreApplication.translate("MainWindow", u"6", None))self.four.setText(QCoreApplication.translate("MainWindow", u"4", None))self.mul.setText(QCoreApplication.translate("MainWindow", u"\u00d7", None))self.five.setText(QCoreApplication.translate("MainWindow", u"5", None))self.three.setText(QCoreApplication.translate("MainWindow", u"3", None))self.one.setText(QCoreApplication.translate("MainWindow", u"1", None))self.sub.setText(QCoreApplication.translate("MainWindow", u"-", None))self.two.setText(QCoreApplication.translate("MainWindow", u"2", None))self.equal.setText(QCoreApplication.translate("MainWindow", u"=", None))self.zero.setText(QCoreApplication.translate("MainWindow", u"0", None))self.add.setText(QCoreApplication.translate("MainWindow", u"+", None))self.point.setText(QCoreApplication.translate("MainWindow", u".", None))self.clear.setText(QCoreApplication.translate("MainWindow", u"C", None))self.back.setText(QCoreApplication.translate("MainWindow", u"DEL", None))# retranslateUi
-
2.2、编写代码
- 在项目目录下创建一个main.py文件。
-
from PySide6.QtWidgets import QApplication, QMainWindow from ui import Ui_MainWindow import sysclass MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()self.ui = Ui_MainWindow() # UI类的实例化self.ui.setupUi(self)self.result = '' # 计算结果self.numberResult = 0self.bind() # 绑定函数,不让初始化中的代码过多# 绑定def bind(self):# lambda的作用是连接一个临时函数self.ui.zero.clicked.connect(lambda: self.addNumber('0')) # 0self.ui.one.clicked.connect(lambda: self.addNumber('1')) # 1self.ui.two.clicked.connect(lambda: self.addNumber('2')) # 2self.ui.three.clicked.connect(lambda: self.addNumber('3')) # 3self.ui.four.clicked.connect(lambda: self.addNumber('4')) # 4self.ui.five.clicked.connect(lambda: self.addNumber('5')) # 5self.ui.six.clicked.connect(lambda: self.addNumber('6')) # 6self.ui.seven.clicked.connect(lambda: self.addNumber('7')) # 7self.ui.eight.clicked.connect(lambda: self.addNumber('8')) # 8self.ui.nine.clicked.connect(lambda: self.addNumber('9')) # 9self.ui.add.clicked.connect(lambda: self.addNumber('+')) # 加self.ui.sub.clicked.connect(lambda: self.addNumber('-')) # 减self.ui.mul.clicked.connect(lambda: self.addNumber('*')) # 乘self.ui.exc.clicked.connect(lambda: self.addNumber('/')) # 除self.ui.point.clicked.connect(lambda: self.addNumber('.')) # 小数点self.ui.equal.clicked.connect(lambda: self.equal()) # 等于self.ui.back.clicked.connect(lambda: self.back()) # 回退self.ui.clear.clicked.connect(lambda: self.clear()) # 清除# 输入表达式def addNumber(self, number):self.ui.lineEdit.clear()self.result += numberself.ui.lineEdit.setText(self.result)# 计算def equal(self):self.numberResult = eval(self.result) # 计算结果self.ui.lineEdit.setText(str(self.numberResult))# 回退def back(self):self.result = self.result[:-1] # 移除最后一个元素self.ui.lineEdit.setText(self.result)# 清除def clear(self):self.ui.lineEdit.clear()self.result = ''self.ui.lineEdit.setText(self.result)if __name__ == '__main__':app = QApplication([]) # 启动一个应用window = MainWindow() # 实例化主窗口window.show() # 展示主窗口sys.exit(app.exec()) # 关闭窗口,程序停止运行
-
3、打包
- 将该项目打包成一个exe可执行文件。打开终端,进入主函数所在路径。
-
pyinstaller -F -w main.py # -F:打包成单个文件 # -w:打开时不显示终端 
-
- 生成一个dist文件夹,其中包含了exe文件。
相关文章:
Python项目——计算器(PySide6+Pyinstaller)
1、介绍 使用python编写一个计算器,可以实现基本的运算。【注】该项目最终还有一些细小的bug没有完善,例如符号可以一直输入。 2、实现 使用pyCharm创建一个新的项目。 2.1、设计UI 使用Qt designer设计一个UI界面,保存ui文件࿰…...
ChatGPT 和文心一言哪个更好用?
根据提供的搜索结果,ChatGPT和文心一言各有特点和优势,选择哪一个更好用取决于具体的应用场景和个人需求。以下是两者的对比: ChatGPT: 适用场景:适合需要生成大量知识性文本的任务,如问答系统、知识图谱…...
数据备份与恢复
备份概述 一、备份方式 按照数据库服务状态分为: 冷备份:在备份时暂停数据库运行和服务,将整个数据库复制到备份设备中 热备份:在备份时不停止数据库的运行和服务 按照备份的数据分为: 物理备份:备份…...
数据库原理及数据库的优化
1、数据库的原理 数据库:持久化存储,存到硬盘 性能:oracl>db2>sqlserver>mysql oracl,db2,sqlserver性能差不多,几十万次每秒,myslq性能差很多,几千次每秒,都…...
C语言第三弹---数据类型和变量
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 数据类型和变量 1、数据类型介绍1.1、整型1.2、浮点型1.3、字符型1.4、布尔类型1.5、各种数据类型的长度1.5.1、sizeof操作符1.5.2、数据类型的长度1.5.3、sizeo…...
[通知]rust跟我学:文件时间属性获得方法文章已上线
大家好,我是带剑书生,开源库get_local_info的作者。目前我的付费专栏已经上线第七篇文章,用于介绍在实现get_local_info过程中,遇到该问题所使用的解决方法,喜欢的朋友可以去订阅了,19.9元,非常…...
基于嵌入式的智能智能通风系统
基于嵌入式的智能智能通风系统 功能说明 通过微信小程序控制窗户的开关状体以及倒计时开关和定时开关,小程序上实时显示当前温度湿度和光照强度。 功能展示 02智能通风系统 Mqtt服务器 http://www.yoyolife.fun/iot:Mqtt服务器,我是在这里注…...
如何编写一个好的测试用例?才能防止背黑锅
如何编写一个好的测试用例?才能防止背黑锅 什么是测试用例?一个好的测试用例包含什么?测试用例的编写思路总结 什么是测试用例? 在这之前,思考一个问题,下面这个简单的QQ登录页面,一共又多少条…...
笨蛋学设计模式行为型模式-观察者模式【14】
行为型模式-观察者模式 8.1观察者模式:arrow_up::arrow_up::arrow_up:8.1.1概念8.1.2场景8.1.3优势 / 劣势8.1.4观察者模式可分为观察者的基本结构: 8.1.5观察者模式8.1.6实战8.1.6.1题目描述8.1.6.2输入描述8.1.6.3输出描述8.1.6.4代码 8.1.7总结 8.1观察者模式⬆️…...
上海智慧岛大数据云计算中心项目正式封顶!
上海智慧岛大数据云计算中心封顶仪式现场 1月15日,云端股份在上海智慧岛大数据云计算中心举行封顶仪式。云之端网络(江苏)股份有限公司(以下称“云端股份”)总经理贡伟力先生,常务副总张靖先生等公司成员&…...
靶场实战(19):OSCP备考之VulnHub HA WORDY
交流技术可以关注公众号 OneMoreThink 或后台添加微信,欢迎提出宝贵建议。 0、总结 0.1、攻击思路 资产发现 主机发现服务发现漏洞发现(获取权限) 80端口/HTTP服务 组件漏洞URL漏洞:RFI、FileUpload提升权限 www-data用户 sudosui…...
大模型学习与实践笔记(九)
一、LMDeply方式部署 使用 LMDeploy 以本地对话方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事 2.api 方式部署 运行 结果: 显存占用: 二、报错与解决方案 在使用命令,对lmdeploy 进行源码安装是时,报错 1.源…...
fpga目前就业形势咋样?
FPGA今年各厂给本科生的薪资大概是15-30K,研究生是20-40K,平均薪资在25k左右, 当然具体薪资还要看去哪个公司,哪个城市,以及个人的学校、专业、能力水平、及包括面试时的表现,运气等,这些都会导…...
Linux7 安装 Oracle 19C RAC 详细图文教程
实战篇:Linux7 安装 Oracle 19C RAC 详细图文教程 本文是按照:https://www.modb.pro/db/154424的思路进行编写 一、安装前规划 安装RAC前,当然要先做好规划。具体包含以下几方面: 节点主机版本主机名实例名Grid/Oracle版本Publi…...
【SpringBoot】SpringBoot 项目初始化方法
github 搜索 springboot 模板 github 搜索 springboot 模板,拉取现成代码。 SpringBoot 官方的模板生成器 SpringBoot 官方的模板生成器(https://start.spring.io/) 在 IDEA 开发工具中生成 这里我修改成阿里的镜像主要是要使用 Java8。 …...
34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
二分查找到目标值然后左右找到坐标 问题在于:找左右坐标的时候时间复杂度不是O(logN) class Solution {public int[] searchRange(int[] nums, int target) {int[] ans {-1, -1};if (nums.length 0) return ans;int l 0, r nums.length;while (l < r) {int…...
Mysql深度分页优化的一个实践
问题简述: 最近在工作中遇到了大数据量的查询场景, 日产100w左右明细, 会查询近90天内的数据, 总数据量约1亿, 业务要求支持分页查询与导出. 无论是分页或导出都涉及到深度分页查询, mysql通过limit/offset实现的深度分页查询会存在全表扫描的问题, 比如offset1000w, limit10…...
【JavaEE进阶】 SpringBoot配置⽂件
文章目录 🍀配置⽂件的作⽤🌴SpringBoot配置⽂件🎋配置⽂件的格式🎄properties配置⽂件🚩properties基本语法🚩读取配置⽂件🚩properties的缺点 🌳yml配置⽂件yml基本语法Ƕ…...
excel 常用函数
求和函数: SUM: 将单个值、单元格引用或区域相加。 案例:SUM(A1:A5) (结果:A1到A5单元格的值求和) SUMIF: 对选中范围内符合指定条件的值求和。 案例:SUMIF(B1:B5, ">50&qu…...
【React基础】– JSX语法
文章目录 认识JSX为什么React选择了JSXJSX的使用 React事件绑定this的绑定问题事件参数传递 React条件渲染React列表渲染列表中的key JSX的本质createElement源码Babel官网查看直接编写jsx代码 虚拟DOM的创建过程jsx – 虚拟DOM – 真实DOM声明式编程 阶段案例练习 认识JSX ◼ …...
从URP到Built-in:手把手教你迁移Unity第三人称模板并成功换人(解决Shader报错)
从URP到Built-in:Unity第三人称模板迁移全流程实战指南 当你在Unity中打开官方提供的Third Person模板,准备将其应用到自己的项目时,可能会遇到一个棘手的问题——这个模板是基于URP(Universal Render Pipeline)设计的…...
如何快速在Windows上安装安卓应用?APK Installer的终极免费解决方案
如何快速在Windows上安装安卓应用?APK Installer的终极免费解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想在Windows电脑上运行安卓应用…...
SGLang 未来演进与生态集成:从推理到 Agent 与多模态
系列导读 你现在看到的是《SGLang 推理加速与生产级服务化部署实战》的第 10/10 篇,当前这篇会重点解决:帮助读者建立对 SGLang 生态的全局视野,并规划后续深入方向,完成从入门到精通的闭环。 上一篇回顾:第 9 篇《SGLang 生产级部署排错指南:10 个常见问题与解决方案》…...
IOT-Tree支持[子站-中心]数据同步功能-轻松支持你的物联网平台
在版本1.9.0开始,IOT-Tree内部移植并开源了中心-子站点的数据同步功能,这个功能已经在我们开发团队的企业用户系统中使用了很长一段时间,足够稳定和可靠。 当前很多物联网系统中,经常有如下需求: 1)一些工…...
如何让Windows 11完美运行经典老游戏:DDrawCompat终极兼容方案
如何让Windows 11完美运行经典老游戏:DDrawCompat终极兼容方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/d…...
如何用Win11Debloat免费为Windows系统瘦身:终极优化指南
如何用Win11Debloat免费为Windows系统瘦身:终极优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...
【Perplexity语言学习资源黄金组合】:搭配Anki+TTS+语法解析器的「零依赖」自主学习系统(仅需1台设备)
更多请点击: https://codechina.net 第一章:Perplexity语言学习资源黄金组合的系统定位与核心价值 Perplexity 作为一款以实时检索增强生成(RAG)为核心架构的AI问答引擎,其在语言学习领域的独特价值并非源于通用对话能…...
MapStruct实战:手把手教你处理SpringBoot API中的字段名不一致问题
MapStruct实战:SpringBoot API字段名不一致的优雅解决方案 在SpringBoot开发中,前后端数据交互时经常遇到字段命名规范不一致的问题。数据库使用user_name,前端却要求userName;或者需要隐藏敏感字段如password,转换成*…...
OV5640摄像头数据流抓取与仿真全攻略:从DVP时序到Testbench调试技巧
OV5640摄像头数据流抓取与仿真全攻略:从DVP时序到Testbench调试技巧 在FPGA图像处理系统中,OV5640作为一款高性价比的500万像素CMOS传感器,其DVP接口的数据采集可靠性直接影响整个系统的图像质量。本文将深入探讨如何构建稳健的数据捕获逻辑&…...
告别手动翻日志!用Log Parser 2.2 + Login工具,5分钟自动化分析Windows安全事件
从日志泥潭到智能洞察:Log Parser与Login工具的高效协同实战 Windows安全事件日志就像一座未经开采的金矿,每天产生海量的4624、4625等登录事件记录。传统的手动翻查不仅效率低下,还容易遗漏关键安全线索。本文将带你突破手工操作的瓶颈&…...

