import sys
import os
from PyQt5.QtGui import QIcon
from QCandyUi import CandyWindow
from PyQt5.QtCore import QObject
from PyQt5.QtWidgets import (QWidget,QApplication)
from app import Ui_Form
import math
#主界面窗口
class Calculator(QWidget,Ui_Form,QObject):
# warning_signal = pyqtSignal(str,str)
def __init__(self) -> object: #-> object #_xxx__:系统定义的特殊成员
super(Calculator, self).__init__() #分别调用了父类的初始化函数
self.setupUi(self) #UI界面控件的初始化
self.show()
self.last_result = 0 #该数据成员属于对象,用于存放上次的计算结果
self.setWindowTitle("计算器") #标题的设置
# 图标文件的文件夹
# current work directory
print(os.getcwd())
path = os.path.join(os.path.join(os.getcwd(), "icon")) #
print(path)
path = os.path.join(path, "icon.ico") # 在线转换 http://www.topdf.cn/img2icon
print(path)
icon = QIcon(path)
self.setWindowIcon(icon)
#关联按钮
self.pus_0.clicked.connect(self.buttonClick)
self.pus_1.clicked.connect(self.buttonClick)
self.pus_2.clicked.connect(self.buttonClick)
self.pus_3.clicked.connect(self.buttonClick)
self.pus_4.clicked.connect(self.buttonClick)
self.pus_5.clicked.connect(self.buttonClick)
self.pus_6.clicked.connect(self.buttonClick)
self.pus_7.clicked.connect(self.buttonClick)
self.pus_8.clicked.connect(self.buttonClick)
self.pus_9.clicked.connect(self.buttonClick)
self.pus_Clear.clicked.connect(self.buttonClick)
self.pus_Bck.clicked.connect(self.buttonClick)
self.pus_devide.clicked.connect(self.buttonClick)
self.pus_sub.clicked.connect(self.buttonClick)
self.pus_equare.clicked.connect(self.buttonClick)
self.pus_point.clicked.connect(self.buttonClick)
self.pus_add.clicked.connect(self.buttonClick)
self.pus_multi.clicked.connect(self.buttonClick)
self.pus_Close.clicked.connect(self.buttonClick)
self.pus_percentage.clicked.connect(self.buttonClick)
self.pus_pingfanggen.clicked.connect(self.buttonClick)
self.pus_cifang.clicked.connect(self.buttonClick)
self.last_result = 0
def buttonClick(self): #定义一个函数,判断对应按钮点击并作出预设的动作
pus = self.sender()
try:
if pus.objectName() == "pus_0": #判断点击的是不是按钮0,是的话就进入这个判断语句
text = self.lineEdit.text() #读取文本编辑框的内容
if text == "0" or text =="0.0": #这里是计算器初始化为0,如若处于初始化状态可直接替换
text= "0"
else: #前面有数字则在文本加上一个数字
text += "0"
self.lineEdit.setText(text) #将更改后的文本写入在文本编辑框,显示出来
if pus.objectName() == "pus_1":
text = self.lineEdit.text()
if text == "0" or text =="0.0":
text = "1"
else:
text += "1"
self.lineEdit.setText(text)
if pus.objectName() == "pus_2":
text = self.lineEdit.text()
if text == "0" or text == "0.0":
text = "2"
else:
text += "2"
self.lineEdit.setText(text)
if pus.objectName() == "pus_3":
text = self.lineEdit.text()
if text == "0" or text =="0.0":
text = "3"
else:
text += "3"
self.lineEdit.setText(text)
if pus.objectName() == "pus_4":
text = self.lineEdit.text()
if text == "0" or text =="0.0":
text = "4"
else:
text += "4"
self.lineEdit.setText(text)
if pus.objectName() == "pus_5":
text = self.lineEdit.text()
if text == "0" or text =="0.0":
text = "5"
else:
text += "5"
self.lineEdit.setText(text)
if pus.objectName() == "pus_6":
text = self.lineEdit.text()
if text == "0" or text =="0.0":
text = "6"
else:
text += "6"
self.lineEdit.setText(text)
if pus.objectName() == "pus_7":
text = self.lineEdit.text()
if text == "0" or text =="0.0":
text = "7"
else:
text += "7"
self.lineEdit.setText(text)
if pus.objectName() == "pus_8":
text = self.lineEdit.text()
if text == "0" or text =="0.0":
text = "8"
else:
text += "8"
self.lineEdit.setText(text)
if pus.objectName() == "pus_9":
text = self.lineEdit.text()
if text == "0" or text =="0.0":
text = "9"
else:
text += "9"
self.lineEdit.setText(text)
if pus.objectName() == "pus_add":
text = self.lineEdit.text()
if len(text) > 0 and text[-1].isnumeric():
if "+" in text or "-" in text or "*" in text or "/" in text:
if "+" in text:
numbers_after_split = text.split("+")
self.last_result = float(numbers_after_split[0]) + float(numbers_after_split[1])
if "-" in text:
numbers_after_split = text.split("-")
self.last_result = float(numbers_after_split[0]) - float(numbers_after_split[1])
if "*" in text:
numbers_after_split = text.split("*")
self.last_result = float(numbers_after_split[0]) * float(numbers_after_split[1])
if "/" in text:
numbers_after_split = text.split("/")
self.last_result = float(numbers_after_split[0]) / float(numbers_after_split[1])
# 计算结束,把式子的结果显示到lineEdit
self.lineEdit.setText(str(self.last_result))
# 重新读取一遍文本框的内容,追加“*”
text = self.lineEdit.text()
text += "+"
self.lineEdit.setText(text)
else:
print("前一位非数字,不处理")
if pus.objectName() == "pus_point":
text = self.lineEdit.text()
if len(text) > 0 and text[-1].isnumeric():
text += "."
self.lineEdit.setText(text)
else:
print("前一位非数字,不处理")
if pus.objectName() == "pus_Clear":
self.lineEdit.clear()
self.lineEdit.setText("0")
if pus.objectName() == "pus_Bck":
text = self.lineEdit.text()
print(text)
if len(text) > 0:
new_text = text[0:-1]
self.lineEdit.setText(new_text)
if pus.objectName() == "pus_sub":
text = self.lineEdit.text()
465397639187253简易计算器.rar
需积分: 0 87 浏览量
更新于2022-12-18
收藏 176KB RAR 举报
:“465397639187253简易计算器.rar”是一个压缩文件,可能包含一个名为“简易计算器”的程序或源代码。从标题来看,我们可以推测这是一款简单设计的计算器应用或者是一个编程项目,用于进行基本的算术运算。
:描述中同样提到“465397639187253简易计算器.rar”,这表明压缩包内含有的内容与标题一致,即一个简易计算器的实现。由于没有更多的信息,我们无法得知这个计算器是用何种编程语言编写,其功能是否复杂,或者是否具有图形用户界面(GUI)。
:由于标签为空,我们无法获得关于该计算器的额外信息,如技术特性、适用平台等。通常,标签会帮助我们快速了解文件的关键属性,但在此情况下,我们需要依赖标题和描述来推断。
【压缩包子文件的文件名称列表】:仅有一个名为“简易计算器”的文件。这可能是可执行文件(如.exe for Windows)、源代码文件(如.py for Python, .java for Java, 或者.cpp/.h for C++),或者是包含了多个文件的文件夹。如果是一个可执行文件,用户可以直接运行进行计算;如果是源代码,用户可能需要相应的编译器或解释器来运行或查看代码。
在这个简易计算器项目中,我们可能会涉及以下知识点:
1. **基础算术运算**:计算器的核心功能包括加、减、乘、除,可能还包括乘方、取余等高级运算。
2. **用户界面设计**:如果计算器有GUI,那么可能涉及到窗口设计、按钮布局、事件处理等,如使用Windows Forms(C#)、JavaFX(Java)、Tkinter(Python)等库。
3. **命令行界面**:如果是一个命令行计算器,那么主要通过标准输入输出进行交互,可能涉及控制台读写和解析用户输入。
4. **编程语言基础**:根据实际的源代码文件类型,会涉及到对应编程语言的基本语法,如变量声明、条件语句、循环结构、函数定义等。
5. **错误处理**:计算器需要处理非法输入,比如除以零、非数字输入等,需要有适当的错误处理机制。
6. **代码结构与模块化**:良好的计算器程序通常会将功能拆分为不同的函数或类,便于维护和扩展。
7. **编译与调试**:如果是源代码,用户需要知道如何使用编译器或解释器来构建和运行程序,并使用调试工具找出潜在问题。
8. **版本控制**:对于开发项目,通常会使用Git等版本控制系统来管理代码的版本和协同开发。
9. **软件测试**:确保计算器的每个功能都能正确工作,可能包括单元测试和集成测试。
由于缺乏具体的信息,我们只能做出这些一般性的假设。若要深入了解,需要解压文件并查看其内容,或从提供者那里获取更多信息。

m0_74307240
- 粉丝: 0
最新资源
- 仿脑计算的研究现状论文参考文献.doc
- 基于卫星定位+4G网络技术的列车接近警示装置.docx
- 过程分析及文件记录清单S6外部提供.docx
- 项目建筑劳务派遣合同.doc
- 乙烯基酯重防腐地坪.doc
- 数据库课程设计---餐饮管理系统.doc
- PBA工法概述.ppt
- 电力设备材料采购合同.doc
- 中水回用机房设备安装.doc
- 阜宁县某河涵闸施工方案.docx
- 工程监理单位管理办法.doc
- 互联网+背景下农村寄宿制学校家校共育的途径探究.docx
- 项目监理部安全监理责任制度.doc
- 高层建筑给排水系统安装及施工技术.doc
- 市政给排水管道施工质量控制浅析(施工必学).pdf
- 单片机与PC机串口通信温度记录仪大学设计.doc