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 ◼ …...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...

