欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Python教程(二十一) : 从零开始制作计算器应用【PyQt6】

Python教程(二十一) : 从零开始制作计算器应用【PyQt6】

2024/10/25 1:29:56 来源:https://blog.csdn.net/cdns_1/article/details/141992408  浏览:    关键词:Python教程(二十一) : 从零开始制作计算器应用【PyQt6】

文章目录

    • 专栏列表
    • 环境准备
    • 代码解析
      • 主要组件
      • 初始化界面
      • 布局设置
      • 事件处理
      • 计算逻辑
    • 运行应用
    • 完整代码
    • 示例截图
    • 总结
    • 注意

专栏列表

  • Python教程(十):面向对象编程(OOP)
  • Python教程(十一):单元测试与异常捕获
  • Python教程(十二):面向对象高级编程详解
  • Python教程(十三):常用内置模块详解
  • Python教程(十四):Requests模块详解
  • Python教程(十五):IO 编程
  • Python教程(十六):进程、线程、线程锁
  • Python教程(十七):协程、 asyncio与 aiohttp【异步IO】
  • Python教程(十八): 从零到一教会你用 Django【Web 开发】
  • Python教程(十九):使用Tkinter制作计算器
  • Python教程(二十) : 十分钟入门【PyQt6】

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


在这篇文章中,我们将通过一个简单的示例来展示如何使用 PyQt6 库来创建一个图形用户界面(GUI)计算器。PyQt6 是一个用于创建跨平台桌面应用程序的库,它提供了丰富的控件和工具,使得开发图形界面变得简单快捷。

环境准备

在开始之前,请确保你已经安装了 PyQt6。如果尚未安装,可以通过 pip 安装:

pip install PyQt6

代码解析

主要组件

  • mainWidget:继承自 QWidget,作为计算器的主窗口。
  • calc:继承自 QMainWindow,作为应用程序的主窗口。

初始化界面

mainWidget 类中,我们首先创建了一个 QLineEdit 控件用于显示输入的表达式和计算结果。然后,我们定义了一个 start 方法来初始化计算器的界面布局。

def start(self):grid = QGridLayout(self)grid.setSpacing(10)self.setGeometry(300, 300, 400, 300)grid.addWidget(self.edit, 0, 0, 1, 4)# ...

布局设置

我们使用 QGridLayout 来组织计算器的按钮。通过一个嵌套的列表推导式,我们创建了一个包含按钮位置的列表,然后遍历这个列表,为每个按钮设置位置和事件处理函数。

positions = [(i+1, j) for i in range(5) for j in range(4)]
for position, name in zip(positions, names):if name == '':continuebutton = QPushButton(name)button.setFont(QFont('Arial', 12))button.clicked.connect(lambda: self.on_button_click(name))grid.addWidget(button, *position)

事件处理

  • on_button_click:当按钮被点击时,这个方法会被调用,它将按钮的文本添加到 QLineEdit 控件中。
  • calculate_result:当点击等号按钮时,这个方法会被调用,它使用 eval 函数来计算表达式的结果,并将其显示在 QLineEdit 控件中。
  • clear_screen:清空 QLineEdit 控件中的文本。
  • back:删除 QLineEdit 控件中的最后一个字符。

计算逻辑

计算器的核心逻辑在于 calculate 方法,它使用 Python 的 eval 函数来计算字符串形式的数学表达式。这是一个简单直接的方法,但在实际应用中,我们可能需要一个更健壮的解析器来处理复杂的表达式和错误。

def calculate(self, expression):try:result = eval(expression)return str(result)except Exception as e:return "Error"

运行应用

最后,我们定义了一个 main 函数来启动应用程序。这个函数创建了一个 QApplication 实例和一个 calc 窗口,并显示它。

def main():app = QApplication(sys.argv)ex = calc()sys.exit(app.exec())

完整代码

import sys
from PyQt6.QtWidgets import (QWidget, QPushButton, QApplication, QMainWindow, QGridLayout, QLineEdit)
from PyQt6.QtGui import QFontclass mainWidget(QWidget):def __init__(self):super().__init__()self.edit = QLineEdit("123")self.edit.setFont(QFont('Arial', 20))self.start()def add(self,*args):sender = self.sender()print('print',args)print('print',sender.text())def start(self):grid = QGridLayout(self)grid.setSpacing(10)self.setGeometry(300,300,400,300)grid.addWidget(self.edit, 0, 0,1,4)names = ['Cls', 'Bck', '', '','7', '8', '9', '/','4', '5', '6', '*','1', '2', '3', '-','0', '.', '=', '+']positions = [(i+1, j) for i in range(5) for j in range(4)]for position, name in zip(positions, names):if name == '':continuebutton = QPushButton(name)button.setFont(QFont('Arial', 12))button.clicked.connect(lambda: self.on_button_click(name))grid.addWidget(button, *position)back = QPushButton("Bck")back.setFont(QFont('Arial', 12))back.clicked.connect(lambda: self.back())grid.addWidget(back,1,1)equal = QPushButton("=")equal.setFont(QFont('Arial', 12))equal.clicked.connect(lambda: self.calculate_result())grid.addWidget(equal, 5, 2)Cls = QPushButton("Cls")Cls.setFont(QFont('Arial', 12))Cls.clicked.connect(lambda: self.clear_screen())grid.addWidget(Cls, 1, 0)def calculate(self,expression):try:result = eval(expression)return str(result)except Exception as e:return "Error"# 按钮点击事件def on_button_click(self,*args):current_expression = self.edit.text()text = self.sender().text()print(current_expression , text)self.edit.setText( current_expression +text)# # 清除屏幕def clear_screen(self):self.edit.setText('')# 计算结果def calculate_result(self):current_expression = self.edit.text()result = self.calculate(current_expression)print(result)self.edit.setText(result)# 计算结果def back(self):current_expression = self.edit.text()result =current_expression[0:len(current_expression)-1]self.edit.setText(result)class calc(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.statusBar().showMessage('计算器准备就绪')widget = mainWidget()self.setCentralWidget(widget)self.setGeometry(300, 300, 400, 300)self.setWindowTitle('PyQt6 制作计算器')self.show()def main():app = QApplication(sys.argv)ex = calc()sys.exit(app.exec())if __name__ == '__main__':main()

示例截图

在这里插入图片描述

总结

通过这篇文章,我们展示了如何使用 PyQt6 来创建一个简单的计算器应用。这个示例涵盖了 PyQt6 应用程序的基本结构,包括窗口、布局、控件和事件处理。希望这个示例能够帮助你理解 PyQt6 的基本概念,并激发你进一步探索和学习 PyQt6 的兴趣。

注意

  • 实际应用中应避免使用 eval 函数,因为它可能会执行不安全的代码。
  • 在实际开发中,应考虑使用更安全和健壮的数学表达式解析器。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com