图形界面四则运算计算器(Python+PyQt5)

news2025/1/17 3:52:01

(1) 导入所需的库和模块。
(2) 创建一个名为`Calculator`的类,继承自`QMainWindow`。
(3) 在`Calculator`类的`__init__`方法中,调用`initUI`方法初始化界面。
(4) 在`initUI`方法中,设置窗口标题和大小,创建显示结果的文本框,并调用`create_buttons`方法创建按钮。
(5) 在`create_buttons`方法中,创建数字按钮、运算符按钮、清除按钮和等号按钮,并将它们添加到网格布局中。
(6) 为每个按钮设置信号槽,以便在点击按钮时执行相应的操作。
(7) 在`on_number_click`、`on_operator_click`、`on_clear_click`和`on_equal_click`方法中,分别处理数字按钮、运算符按钮、清除按钮和等号按钮的点击事件。
(8) 在主程序中,创建`Calculator`实例并运行应用。

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QPushButton, QGridLayout, QWidget

class Calculator(QMainWindow):
    def __init__(self):
        super().__init__()

        # 初始化界面
        self.initUI()
        
    def initUI(self):
        # 设置窗口标题和大小
        self.setWindowTitle('简易计算器')
        self.setGeometry(300, 300, 300, 300)
        # 创建显示结果的文本框
        self.result_display = QLineEdit(self)
        self.result_display.setReadOnly(True) # 设置为只读
        self.result_display.move(10, 10)
        self.result_display.resize(280, 40)

        # 创建按钮并设置信号槽
        self.create_buttons()
        # 显示窗口
        self.show()

    def create_buttons(self):
        # 创建数字按钮
        self.num_buttons = []
        for i in range(10):
            button = QPushButton(str(i), self)
            button.clicked.connect(self.on_number_click)
            self.num_buttons.append(button)
        # 创建运算符按钮
        self.add_button = QPushButton('+', self)
        self.add_button.clicked.connect(self.on_operator_click)
        self.subtract_button = QPushButton('-', self)
        self.subtract_button.clicked.connect(self.on_operator_click)
        self.multiply_button = QPushButton('*', self)
        self.multiply_button.clicked.connect(self.on_operator_click)
        self.divide_button = QPushButton('/', self)
        self.divide_button.clicked.connect(self.on_operator_click)

        # 创建清除按钮
        self.clear_button = QPushButton('C', self)
        self.clear_button.clicked.connect(self.on_clear_click)
        # 创建等号按钮
        self.equal_button = QPushButton('=', self)
        self.equal_button.clicked.connect(self.on_equal_click)
        # 使用网格布局排列按钮
        grid = QGridLayout()
        grid.setSpacing(5)
        positions = [(i, j) for i in range(1, 5) for j in range(4)]
        for pos, button in zip(positions, self.num_buttons[1:] + [self.num_buttons[0], self.add_button, self.subtract_button, self.multiply_button, self.divide_button, self.clear_button, self.equal_button]):
            grid.addWidget(button, *pos)
        central_widget = QWidget(self)
        central_widget.setLayout(grid)
        central_widget.move(10, 60)
        central_widget.resize(280, 230)

    def on_number_click(self):
        # 数字按钮点击事件处理
        button = self.sender()
        self.result_display.setText(self.result_display.text() + button.text())
        
    def on_operator_click(self):
        # 运算符按钮点击事件处理
        button = self.sender()
        self.result_display.setText(self.result_display.text() + ' ' + button.text() + ' ')

    def on_clear_click(self):
        # 清除按钮点击事件处理
        self.result_display.clear()

    def on_equal_click(self):
        # 等号按钮点击事件处理
        try:
            result = eval(self.result_display.text())
            self.result_display.setText(str(result))
        except:
            self.result_display.setText('错误')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    calculator = Calculator()
    sys.exit(app.exec_())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1091613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习开发流程

1.全局流程 2.训练过程 损失函数:用来度量深度学习模型的预测值f(x)与真实标签值Y的差异程度的运算函数,损失函数越小,模型型训练的效果越好。 2.1 深度学习训练主要训练步骤: 确定模型将模型加在到cpu或者gpu中确定训练数据确定优化器和超…

接口测试入门:深入理解接口测试!

很多人会谈论接口测试。到底什么是接口测试?如何进行接口测试?这篇文章会帮到你。 一、前端和后端 在谈论接口测试之前,让我们先明确前端和后端这两个概念。 前端是我们在网页或移动应用程序中看到的页面,它由 HTML 和 CSS 编写…

【重拾C语言】十二、C语言程序开发(自顶向下、逐步求精;结构化程序设计原则;程序风格)

目录 前言 12.1 求玉米单产——自顶向下、逐步求精 12.1.1 自顶向下、逐步求精 12.1.2 求玉米单产 12.2 结构化程序设计原则 12.2.1 顺序 12.2.2 选择 12.2.3 循环 12.2.4 模块化 12.3 程序风格 12.3.1 程序风格 12.3.2 行文格式、标识符 12.3.3 注释及其它 前言…

露营装备经营商城小程序搭建

近几年露营人群逐渐增加,相应的装备商也多了起来,各种分类商品在一定程度上销量都非常不错,然而传统线下门店经营方面,面对的痛点也不少。 通过【雨科】平台搭建露营装备商城,让客户多场景平台随时购物,多流…

【论文解读】人工智能时代的科学发现

一、简要介绍 人工智能(AI)正越来越多地融入到科学发现中,以增强和加速研究,帮助科学家产生假设、设计实验、收集和解释大型数据集,并获得仅使用传统的科学方法可能无法获得的见解。在这里,论文研究了过去十…

SecureCRT 自动测试脚本的使用方法

脚本示例(get_batteryifo_interval_2s.vbs): Sub Main Do While(1)crt.Screen.Send "pm_client batteryinfo" & chr(13)crt.Sleep 2000 Loop End Sub 1. 解压 SecureCRT 压缩包(网上下载)&#xff1b…

渗透波菜网站

免责声明 本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利&#xff0c…

Python实现某音短视频JS XB逆向解析

哈喽兄弟们,今天来实现一下某音短视频的JS逆向解析。 知识点 动态数据抓包在这里插入代码片 requests发送请求 X-Bogus 参数逆向环境模块 python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests pip install request…

试验仪器、设备和材料

声明 本文是学习GB-T 4000-2017 焦炭反应性及反应后强度试验方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了测定焦炭反应性及反应后强度试验方法的原理、试验仪器、设备和材料、试样的采取 和制备、试验步骤、结果的计算及…

XGBoost+LR融合

1、背景简介 xgboostlr模型融合方法用于分类或者回归的思想最早由facebook在广告ctr预测中提出,其论文Practical Lessons from Predicting Clicks on Ads at Facebook有对其进行阐述。在这篇论文中他们提出了一种将xgboost作为feature transform的方法。大概的思想…

链路层1:以太网链路层帧格式分析

网络发展的一点点历史回忆 阿帕网(ArpaNet) --> 因特网(InterNet) 1969年,在美国国防部的资助下,建立了一个只有4 个节的ARPANET(阿帕网),连接了四所高校 ARPRNet(阿帕网)是Internet的前身,起源于美国&#xff0…

【沧元图】玉阳宫主是正是邪,和面具人有勾结吗?现在已有答案了

Hello,小伙伴们,我是小郑继续为大家深度解析沧元图。 沧元图这部动漫中,有一个很特殊的人物,也是一个让人看不透的人物,因为很多人都不知道这个人是正还是邪,这个人就是玉阳宫主。 因为这个人明面上是掌管东宁府维护东…

怎么在谷歌浏览器中安装.crx扩展名的离线chrome插件

前提概要: 其实,如果用户可以正常打开chrome商店,那么用户可以搜索找到对应的插件在线安装。问题现在用户很可能无法打开chrome商品。那么 怎么样将已经下载好的 chrome插件 (.crx 前提概要:其实,如果用户可以正常打开…

【51单片机】LED点阵屏(动画显示CSDN)

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大…

vue3 自定义指令

Vue 除了内置的一系列指令 (比如 v-model 或 v-show) 之外,Vue 还允许你注册自定义的指令。 一个自定义指令由一个包含类似组件生命周期钩子的对象来定义。钩子函数会接收到指令所绑定元素作为其参数。 在setup语法糖中,任何以 v 开头的驼峰式命名的变量…

基于热交换优化的BP神经网络(分类应用) - 附代码

基于热交换优化的BP神经网络(分类应用) - 附代码 文章目录 基于热交换优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.热交换优化BP神经网络3.1 BP神经网络参数设置3.2 热交换算法应用 4.测试结果&#x…

Java Cryptography Tools and Techniques

链接:https://pan.baidu.com/s/1n6tYUtYYL_3Gn_Mjp4QEWg?pwdh23n 提取码:h23n Block and Stream Ciphers Two fundamental types of encryption algorithms are Block Ciphers and Stream Ciphers. Block Ciphers : These work on data blocks of fix…

【想法】取代NI的 PCIe-8371

PCIe-8371 涨价非常厉害。 PCA3 https://www.terasic.com.tw/cgi-bin/page/archive.pl?LanguageEnglish&CategoryNo65&No1143 PCA3 (PCIe Cable Adapter, Gen 3) is a conversion card to connect boards with your host PC. It can support up to PCIe Gen 3 x4. …

C++笔记之popen()和std_system()和std_async()执行系统命令比较

C笔记之popen()和std_system()和std_async()执行系统命令比较 code review! 文章目录 C笔记之popen()和std_system()和std_async()执行系统命令比较1.popen()2.std::system()3.std::async()——C11提供的异步操作库,适合在多线程中执行外部命令,建议使…

计算机毕业设计选什么题目好?springboot 美食推荐系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…