

这是一款基于 Python Qt5 开发的标准+科学双模式计算器,界面采用简约高级的深色主题,圆角设计、渐变悬停效果、清晰的按钮分区,兼顾颜值与实用性。不仅支持基础的加减乘除、小数点、退格、清空等标准计算功能,还集成了常用的科学计算功能,包括三角函数(sin、cos、tan)、平方根、圆周率π、取模运算,同时优化了计算逻辑,支持高精度计算、错误提示,操作流畅不卡顿,适配Windows、Mac、Linux全平台,是日常办公、学习、工程计算的实用小工具。
工具整体设计遵循现代软件美学,深色背景搭配柔和的按钮配色,数字键、功能键、运算符键分区明确,字体清晰、大小适中,长时间使用不刺眼、不疲劳。按钮采用悬停变色效果,点击反馈明显,操作手感极佳;显示框支持右对齐,方便查看长表达式和计算结果,结果保留10位小数,兼顾精度与可读性,同时加入错误处理机制,避免因输入错误导致程序崩溃,整体体验远超系统自带计算器。
import sysfrom PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *import mathclassScientificCalculator(QMainWindow):def__init__(self): super().__init__()# 窗口基础设置 self.setWindowTitle("🧮 现代科学计算器 - Qt5") self.setFixedSize(450, 620) # 固定窗口尺寸,避免布局错乱 self.setStyleSheet(self.get_global_style()) # 加载美化样式 self.current_input = ""# 存储当前输入的表达式 self.init_ui() # 初始化界面# 核心美化样式(详细优化,提升颜值)defget_global_style(self):return""" QMainWindow { background-color: #1E1E2E; /* 深色主背景,高级不刺眼 */ border-radius: 20px; /* 窗口圆角,更精致 */ } QWidget { font-family: "Microsoft YaHei", "Segoe UI", sans-serif; /* 统一字体,清晰美观 */ } QLineEdit { background-color: #28293E; /* 显示框背景,与主背景呼应 */ color: #FFFFFF; /* 显示文本颜色,纯白清晰 */ border: none; /* 取消边框,更简洁 */ border-radius: 18px; /* 显示框圆角 */ padding: 22px 25px; /* 内边距,避免文本贴边 */ font-size: 30px; /* 字体大小,方便查看 */ font-weight: 500; /* 字体粗细,提升辨识度 */ text-align: right; /* 文本右对齐,符合计算器使用习惯 */ } QLineEdit:focus { outline: none; /* 取消聚焦边框,保持界面整洁 */ } QPushButton { border: none; /* 取消按钮边框 */ border-radius: 20px; /* 按钮圆角,柔和不尖锐 */ font-size: 18px; /* 按钮字体大小 */ color: #FFFFFF; /* 按钮文本颜色 */ padding: 16px; /* 按钮内边距,点击区域更大 */ margin: 2px; /* 按钮间距,避免拥挤 */ } /* 数字按钮样式 */ QPushButton#num { background-color: #3B3D5B; } QPushButton#num:hover { background-color: #4D4F72; /* 悬停变色,反馈明显 */ transform: scale(1.05); /* 悬停轻微放大,提升交互感 */ } /* 运算符按钮样式 */ QPushButton#opt { background-color: #6366F1; font-weight: 600; } QPushButton#opt:hover { background-color: #7C7DFF; transform: scale(1.05); } /* 功能按钮样式(清空、退格、科学功能) */ QPushButton#func { background-color: #2D2F48; color: #A5B3FF; } QPushButton#func:hover { background-color: #3E405D; transform: scale(1.05); } /* 等号按钮样式(突出显示) */ QPushButton#equal { background-color: #F59E0B; font-weight: 600; } QPushButton#equal:hover { background-color: #FFB830; transform: scale(1.05); } """# 初始化界面(完善布局,补充细节)definit_ui(self):# 中心部件与主布局 central_widget = QWidget() self.setCentralWidget(central_widget) main_layout = QVBoxLayout(central_widget) main_layout.setContentsMargins(25, 25, 25, 25) # 主布局内边距 main_layout.setSpacing(18) # 控件间距,避免拥挤# 计算显示框(优化高度,提升视觉比例) self.display = QLineEdit() self.display.setMinimumHeight(90) self.display.setReadOnly(False) # 允许手动输入,更灵活 main_layout.addWidget(self.display)# 按钮网格布局(6行4列,容纳所有功能按钮) button_grid = QGridLayout() button_grid.setSpacing(12) # 按钮之间的间距# 按钮列表:(按钮文本,按钮类型),按布局顺序排列 buttons = [ ("C", "func"), ("←", "func"), ("%", "func"), ("÷", "opt"), ("7", "num"), ("8", "num"), ("9", "num"), ("×", "opt"), ("4", "num"), ("5", "num"), ("6", "num"), ("-", "opt"), ("1", "num"), ("2", "num"), ("3", "num"), ("+", "opt"), ("0", "num"), (".", "num"), ("π", "func"), ("=", "equal"), ("sin", "func"),("cos", "func"),("tan", "func"),("√", "func"), ]# 生成按钮位置(6行4列) positions = [(i, j) for i in range(6) for j in range(4)]# 循环创建按钮,绑定点击事件for (text, btn_type), (row, col) in zip(buttons, positions): button = QPushButton(text) button.setObjectName(btn_type) # 设置按钮类型,用于样式匹配# 绑定点击事件,传递按钮文本 button.clicked.connect(lambda checked, t=text: self.on_button_click(t))# 将按钮添加到网格布局对应位置 button_grid.addWidget(button, row, col)# 将按钮网格添加到主布局 main_layout.addLayout(button_grid)# 按钮点击事件处理(完善逻辑,增加细节)defon_button_click(self, text):# 获取当前显示框的内容 current_text = self.display.text()# 清空按钮(C):清空显示框和当前输入if text == "C": self.display.clear() self.current_input = ""# 退格按钮(←):删除最后一个字符elif text == "←": self.display.setText(current_text[:-1]) self.current_input = current_text[:-1]# 等号按钮(=):计算表达式结果elif text == "=":try:# 替换特殊运算符,适配Python eval计算规则 expression = current_text.replace("÷", "/").replace("×", "*")# 计算结果,保留10位小数,避免结果过长 result = round(eval(expression), 10)# 若结果为整数,去掉小数部分(优化显示)if result.is_integer(): result = int(result) self.display.setText(str(result)) self.current_input = str(result) # 将结果作为下一次计算的初始值except Exception as e:# 捕获非法输入、计算错误,显示错误提示 self.display.setText("错误") self.current_input = ""# 圆周率(π):插入圆周率值(保留6位小数,兼顾精度与简洁)elif text == "π": pi_value = str(round(math.pi, 6)) self.display.setText(current_text + pi_value) self.current_input = current_text + pi_value# 平方根(√):计算当前输入的平方根elif text == "√":try:# 若当前有输入,计算平方根;若无输入,提示错误if current_text: sqrt_result = round(math.sqrt(float(current_text)), 10)if sqrt_result.is_integer(): sqrt_result = int(sqrt_result) self.display.setText(str(sqrt_result)) self.current_input = str(sqrt_result)else: self.display.setText("错误")except: self.display.setText("错误")# 三角函数(sin、cos、tan):计算角度对应的三角函数值(角度转弧度)elif text in ["sin", "cos", "tan"]:try:if current_text: angle = float(current_text)# 角度转弧度(math模块默认弧度计算)if text == "sin": trig_result = round(math.sin(math.radians(angle)), 10)elif text == "cos": trig_result = round(math.cos(math.radians(angle)), 10)else: # tan trig_result = round(math.tan(math.radians(angle)), 10)if trig_result.is_integer(): trig_result = int(trig_result) self.display.setText(str(trig_result)) self.current_input = str(trig_result)else: self.display.setText("错误")except: self.display.setText("错误")# 其他按钮(数字、运算符、小数点):直接拼接输入else:# 避免开头出现多个小数点,优化输入体验if text == "."and"."in current_text:return self.display.setText(current_text + text) self.current_input = current_text + text# 主程序入口if __name__ == "__main__": app = QApplication(sys.argv)# 创建计算器窗口实例 calculator = ScientificCalculator()# 显示窗口 calculator.show()# 运行应用程序 sys.exit(app.exec_())pip install pyqt5这款 Qt5 科学计算器是一款集颜值与实用性于一体的桌面工具,完美适配日常计算与基础科学计算场景,无论是学生做题、办公算账,还是简单的工程计算,都能轻松胜任。工具在设计上遵循现代简约美学,采用深色主题,既符合当下流行的软件设计趋势,又能有效保护视力,长时间使用不易疲劳。
界面布局清晰合理,顶部是宽大的计算显示框,支持右对齐显示,字体清晰、大小适中,能轻松容纳长表达式和计算结果,同时允许手动输入表达式,操作更灵活。显示框下方是6行4列的按钮网格,按钮按功能分为三类,颜色区分明显:数字按钮(灰色系)、运算符按钮(紫色系)、功能按钮(深色系),等号按钮采用醒目的橙色,突出核心功能,用户能快速区分不同类型的按钮,提升操作效率。
按钮设计加入了悬停效果,鼠标悬浮时按钮轻微放大并变色,不仅提升了视觉体验,还能清晰反馈当前选中的按钮,避免误触。同时,按钮间距合理、点击区域较大,操作手感舒适,即使是快速点击也不易出错。
功能方面,工具兼顾标准计算与科学计算,满足不同用户的需求。标准计算支持加减乘除、小数点、取模(%)运算,以及清空(C)、退格(←)等基础操作;科学计算支持三角函数(sin、cos、tan)、平方根(√)、圆周率(π),其中三角函数支持角度计算(自动将角度转为弧度),平方根和三角函数计算结果保留10位小数,若结果为整数则自动去掉小数部分,兼顾精度与显示简洁性。
计算逻辑经过优化,加入了完善的错误处理机制:当输入非法表达式(如连续运算符、无输入时点击计算)、计算异常(如负数开平方)时,会显示“错误”提示,避免程序崩溃,同时清空当前输入,方便用户重新操作。此外,工具还优化了输入体验,避免出现多个小数点的情况,让输入更规范。
工具采用 Qt5 原生组件开发,启动速度快、内存占用低,运行流畅不卡顿,支持Windows、Mac、Linux全平台运行,无需额外配置,安装依赖后复制代码即可直接运行。整体风格与前3个工具(文件搜索、图片转换、富文本编辑器)保持一致,都是简约现代的美观设计,形成一套完整的 Qt5 实用工具集。
这款计算器不仅是一款实用的工具,也是 Python Qt5 桌面开发的经典案例,涵盖了网格布局、信号与槽、QSS 美化、数学逻辑处理、错误捕获等核心技术点,适合新手学习参考,也适合日常使用。
简约现代计算器(支持标准+科学计算)技术点:QGridLayout 布局、信号与槽、数学表达式解析、QSS 美化、按钮动画、高精度计算
import sysfrom PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *import mathclassCalculator(QMainWindow):def__init__(self): super().__init__() self.setWindowTitle("🧮 现代计算器") self.setFixedSize(420, 580) self.setStyleSheet(self.get_style()) self.init_ui()defget_style(self):return""" QMainWindow { background-color: #1E1E2E; } QLineEdit { background-color: #28293E; color: #FFFFFF; border: none; border-radius: 16px; padding: 20px; font-size: 28px; } QPushButton { border: none; border-radius: 18px; font-size: 16px; color: #FFFFFF; padding: 14px; } QPushButton#num { background-color: #3B3D5B; } QPushButton#num:hover { background-color: #4D4F72; } QPushButton#opt { background-color: #6366F1; color: white; } QPushButton#opt:hover { background-color: #7C7DFF; } QPushButton#func { background-color: #2D2F48; color: #A5B3FF; } QPushButton#func:hover { background-color: #3E405D; } QPushButton#equal { background-color: #F59E0B; color: white; } QPushButton#equal:hover { background-color: #FFB830; } """definit_ui(self): central = QWidget() self.setCentralWidget(central) main_layout = QVBoxLayout(central) main_layout.setContentsMargins(24, 24, 24, 24) main_layout.setSpacing(16)# 显示框 self.display = QLineEdit() self.display.setAlignment(Qt.AlignRight) self.display.setMinimumHeight(80) main_layout.addWidget(self.display)# 按钮网格 grid = QGridLayout() grid.setSpacing(12) buttons = [ ("C", "func"), ("←", "func"), ("%", "func"), ("÷", "opt"), ("7", "num"), ("8", "num"), ("9", "num"), ("×", "opt"), ("4", "num"), ("5", "num"), ("6", "num"), ("-", "opt"), ("1", "num"), ("2", "num"), ("3", "num"), ("+", "opt"), ("0", "num"), (".", "num"), ("π", "func"), ("=", "equal"), ("sin", "func"), ("cos", "func"), ("tan", "func"), ("√", "func"), ] positions = [(i, j) for i in range(6) for j in range(4)]for i, ((text, cls), pos) in enumerate(zip(buttons, positions)): btn = QPushButton(text) btn.setObjectName(cls) btn.clicked.connect(lambda checked, t=text: self.on_btn_click(t)) grid.addWidget(btn, *pos) main_layout.addLayout(grid)defon_btn_click(self, t): current = self.display.text()if t == "C": self.display.clear()elif t == "←": self.display.setText(current[:-1])elif t == "=":try: exp = current.replace("÷", "/").replace("×", "*") res = eval(exp) self.display.setText(str(round(res, 10)))except: self.display.setText("错误")elif t == "π": self.display.setText(current + str(math.pi))elif t == "√":try: res = math.sqrt(float(current)) self.display.setText(str(round(res, 10)))except: self.display.setText("错误")elif t == "sin":try: res = math.sin(math.radians(float(current))) self.display.setText(str(round(res, 10)))except: self.display.setText("错误")elif t == "cos":try: res = math.cos(math.radians(float(current))) self.display.setText(str(round(res, 10)))except: self.display.setText("错误")elif t == "tan":try: res = math.tan(math.radians(float(current))) self.display.setText(str(round(res, 10)))except: self.display.setText("错误")else: self.display.setText(current + t)if __name__ == "__main__": app = QApplication(sys.argv) win = Calculator() win.show() sys.exit(app.exec_())pip install pyqt5功能: