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 ◼ …...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...