目录
设计UI图
代码
结果展示
设计UI图
代码
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QFileDialog, QMainWindow, QMessageBox
from untitled import Ui_MainWindow
import sys
class PyQtMainEntry(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# 用于存储当前输入的数字或表达式的一部分
self.current_expression = ""
# 用于存储上一次的运算结果,初始化为0
self.previous_result = 0
# 用于标记是否是连续运算,初始化为False
self.is_continuous_operation = False
def slot1(self):
"""
当数字按钮1被点击时调用此函数
其作用是将数字1添加到当前输入的表达式中
"""
self.append_to_expression('1')
def slot2(self):
self.append_to_expression('2')
def slot3(self):
self.append_to_expression('3')
def slot4(self):
self.append_to_expression('4')
def slot5(self):
self.append_to_expression('5')
def slot6(self):
self.append_to_expression('6')
def slot7(self):
self.append_to_expression('7')
def slot8(self):
self.append_to_expression('8')
def slot9(self):
self.append_to_expression('9')
def slot10(self):
self.append_to_expression('0')
def slot11(self):
self.append_to_expression('.')
def slot12(self):
self.append_to_expression('+')
def slot13(self):
self.append_to_expression('-')
def slot14(self):
self.append_to_expression('*')
def slot15(self):
self.append_to_expression('/')
def slot16(self):
"""
当等号按钮被点击时调用此函数
其作用是计算当前输入的表达式的值,并将结果显示在输入框中
同时更新相关变量以便进行后续运算或输入
"""
try:
result = self.evaluate_expression()
self.lineEdit.setText(str(result))
self.previous_result = result
self.is_continuous_operation = True
self.current_expression = ""
except Exception as e:
QMessageBox.critical(self, "错误", f"计算出错: {e}")
def append_to_expression(self, value):
"""
将传入的数字或运算符添加到当前表达式中
Args:
value: 要添加的数字或运算符,如'1'、'+'等
根据is_continuous_operation的值来决定添加方式:
- 如果是连续运算(is_continuous_operation为True),则将上一次的运算结果与传入的值拼接起来
- 如果不是连续运算(is_continuous_operation为False),则直接将传入的值添加到当前表达式末尾
最后将更新后的表达式显示在输入框中
"""
if self.is_continuous_operation:
self.current_expression = str(self.previous_result) + value
self.is_continuous_operation = False
else:
self.current_expression += value
self.lineEdit.setText(self.current_expression)
def clear_screen(self):
"""
用于清空屏幕的函数,当点击C按钮时被调用
此函数执行以下操作:
- 将self.current_expression重置为空字符串,确保下次输入时不会基于旧内容拼接
- 将self.is_continuous_operation重置为False,表示重新开始新的一轮输入,并非连续运算状态
- 通过self.lineEdit.setText("")清空输入框中的显示内容,实现屏幕清空的视觉效果
"""
self.current_expression = ""
self.is_continuous_operation = False
self.lineEdit.setText("")
def evaluate_expression(self):
"""
计算当前输入的表达式的值
Returns:
计算结果,如果表达式为空则返回上一次的运算结果
首先获取当前表达式,如果表达式为空,则直接返回上一次的运算结果。
否则,使用eval函数对表达式进行计算,如果计算过程中出现错误,则抛出异常
"""
expression = self.current_expression
if not expression:
return self.previous_result
try:
result = eval(expression)
return result
except Exception as e:
raise e
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = PyQtMainEntry()
window.show()
sys.exit(app.exec_())
结果展示