pyqt 实现计算器

news2024/12/23 13:26:13

1.由designer设计实现的计算器类

文件名为:untitled.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(241, 341)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lcdNumber = QtWidgets.QLCDNumber(self.centralwidget)
        self.lcdNumber.setGeometry(QtCore.QRect(30, 40, 151, 31))
        font = QtGui.QFont()
        font.setBold(False)
        font.setUnderline(False)
        font.setWeight(50)
        font.setStrikeOut(False)
        self.lcdNumber.setFont(font)
        self.lcdNumber.setDigitCount(10)
        self.lcdNumber.setMode(QtWidgets.QLCDNumber.Dec)
        self.lcdNumber.setObjectName("lcdNumber")
        self.pushButton1 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton1.setGeometry(QtCore.QRect(30, 110, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton1.setFont(font)
        self.pushButton1.setObjectName("pushButton1")
        self.pushButton2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton2.setGeometry(QtCore.QRect(70, 110, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton2.setFont(font)
        self.pushButton2.setObjectName("pushButton2")
        self.pushButton3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton3.setGeometry(QtCore.QRect(110, 110, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton3.setFont(font)
        self.pushButton3.setObjectName("pushButton3")
        self.pushButton4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton4.setGeometry(QtCore.QRect(30, 140, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton4.setFont(font)
        self.pushButton4.setObjectName("pushButton4")
        self.pushButton8 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton8.setGeometry(QtCore.QRect(70, 170, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton8.setFont(font)
        self.pushButton8.setObjectName("pushButton8")
        self.pushButton5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton5.setGeometry(QtCore.QRect(70, 140, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton5.setFont(font)
        self.pushButton5.setObjectName("pushButton5")
        self.pushButton6 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton6.setGeometry(QtCore.QRect(110, 140, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton6.setFont(font)
        self.pushButton6.setObjectName("pushButton6")
        self.pushButton7 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton7.setGeometry(QtCore.QRect(30, 170, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton7.setFont(font)
        self.pushButton7.setObjectName("pushButton7")
        self.pushButton9 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton9.setGeometry(QtCore.QRect(110, 170, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton9.setFont(font)
        self.pushButton9.setObjectName("pushButton9")
        self.pushButtonJiafa = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonJiafa.setGeometry(QtCore.QRect(150, 110, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButtonJiafa.setFont(font)
        self.pushButtonJiafa.setObjectName("pushButtonJiafa")
        self.pushButtonJianf = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonJianf.setGeometry(QtCore.QRect(150, 140, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButtonJianf.setFont(font)
        self.pushButtonJianf.setObjectName("pushButtonJianf")
        self.pushButtonChuaf = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonChuaf.setGeometry(QtCore.QRect(150, 200, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButtonChuaf.setFont(font)
        self.pushButtonChuaf.setObjectName("pushButtonChuaf")
        self.pushButtonX = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonX.setGeometry(QtCore.QRect(150, 170, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButtonX.setFont(font)
        self.pushButtonX.setObjectName("pushButtonX")
        self.pushButtonAnswer = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonAnswer.setGeometry(QtCore.QRect(110, 200, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButtonAnswer.setFont(font)
        self.pushButtonAnswer.setObjectName("pushButtonAnswer")
        self.pushButton0 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton0.setGeometry(QtCore.QRect(70, 200, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButton0.setFont(font)
        self.pushButton0.setObjectName("pushButton0")
        self.pushButtonClear = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonClear.setGeometry(QtCore.QRect(30, 200, 31, 21))
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.pushButtonClear.setFont(font)
        self.pushButtonClear.setObjectName("pushButtonClear")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(20, 240, 171, 16))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.line_2 = QtWidgets.QFrame(self.centralwidget)
        self.line_2.setGeometry(QtCore.QRect(20, 20, 171, 16))
        self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.line_3 = QtWidgets.QFrame(self.centralwidget)
        self.line_3.setGeometry(QtCore.QRect(10, 30, 20, 221))
        self.line_3.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")
        self.line_4 = QtWidgets.QFrame(self.centralwidget)
        self.line_4.setGeometry(QtCore.QRect(180, 30, 20, 221))
        self.line_4.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_4.setObjectName("line_4")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 241, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton1.setText(_translate("MainWindow", "1"))
        self.pushButton2.setText(_translate("MainWindow", "2"))
        self.pushButton3.setText(_translate("MainWindow", "3"))
        self.pushButton4.setText(_translate("MainWindow", "4"))
        self.pushButton8.setText(_translate("MainWindow", "8"))
        self.pushButton5.setText(_translate("MainWindow", "5"))
        self.pushButton6.setText(_translate("MainWindow", "6"))
        self.pushButton7.setText(_translate("MainWindow", "7"))
        self.pushButton9.setText(_translate("MainWindow", "9"))
        self.pushButtonJiafa.setText(_translate("MainWindow", "+"))
        self.pushButtonJianf.setText(_translate("MainWindow", "-"))
        self.pushButtonChuaf.setText(_translate("MainWindow", "/"))
        self.pushButtonX.setText(_translate("MainWindow", "x"))
        self.pushButtonAnswer.setText(_translate("MainWindow", "="))
        self.pushButton0.setText(_translate("MainWindow", "0"))
        self.pushButtonClear.setText(_translate("MainWindow", "c"))

2.实现计算器类的实例化,窗口展示并添加逻辑功能

import sys
from untitled import Ui_MainWindow #引入在designer里编辑的类
from PyQt5.QtCore import *         #包含了包的核心的非gui功能
from PyQt5.QtGui import *

from PyQt5.QtWidgets import *      #包含了ui元素组件

#实体化designer里编辑的类,然后在继承
class calculator(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.num_cal = 0
        self.setupUi(self)
        self.num1 = 0
        self.num2 = 0

    #触发器的固定格式
    @pyqtSlot()
    def on_pushButton1_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+1))
        # print(self.lcdNumber.value())
    @pyqtSlot()
    def on_pushButton2_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+2))
    @pyqtSlot()
    def on_pushButton3_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+3))
    @pyqtSlot()
    def on_pushButton4_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+4))
    @pyqtSlot()
    def on_pushButton5_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+5))
    @pyqtSlot()
    def on_pushButton6_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+6))
    @pyqtSlot()
    def on_pushButton7_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+7))
    @pyqtSlot()
    def on_pushButton8_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+8))
    @pyqtSlot()
    def on_pushButton9_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+9))
    @pyqtSlot()
    def on_pushButton0_clicked(self):
        self.lcdNumber.display(int(self.lcdNumber.value()*10+0))


    @pyqtSlot()
    def on_pushButtonJiafa_clicked(self):
        if(self.num_cal == 0):
            self.num1 = self.lcdNumber.value()
            # print(num1)
        # else:
        #     self.num2 = self.lcdNumber.value()
            # print(num2)
        self.num_cal = '+'
        print(self.num_cal)
        self.lcdNumber.display(0)


    @pyqtSlot()
    def on_pushButtonJianf_clicked(self):
        self.num1 = self.lcdNumber.value()
        self.num_cal = '-'

        self.lcdNumber.display(0)
    @pyqtSlot()
    def on_pushButtonX_clicked(self):
        self.num1 = self.lcdNumber.value()
        self.num_cal = '*'
        self.lcdNumber.display(0)
    @pyqtSlot()
    def on_pushButtonChuaf_clicked(self):
        self.num1 = self.lcdNumber.value()
        self.num_cal = '/'
        self.lcdNumber.display(0)

    @pyqtSlot()
    def on_pushButtonClear_clicked(self):
        self.lcdNumber.display(0)

    @pyqtSlot()
    def on_pushButtonAnswer_clicked(self):
        self.num2 = self.lcdNumber.value()
        if self.num_cal == '+':
            ans = self.num1 + self.num2
            print(ans)
            print(self.num2)
            self.lcdNumber.display(ans)
        elif self.num_cal == '-':
            ans = self.num1 - self.num2
            print(ans)
            print(self.num2)
            self.lcdNumber.display(ans)
        elif self.num_cal == '*':
            ans = self.num1 * self.num2
            print(ans)
            print(self.num2)
            self.lcdNumber.display(ans)
        elif self.num_cal == '/':
            ans = self.num1 / self.num2
            print(ans)
            print(self.num2)
            self.lcdNumber.display(ans)

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

3.效果展示

4.总结:

QApplication:

QApplication 类管理图形用户界面应用程序的控制流和主要设置。 可以说 QApplication是Qt的整个后台管理的命脉

app = QApplication(sys.argv)这句作用用来初始化窗口系统 

app.exec():

app.exec_()的作用是运行主循环,必须调用此函数才能开始事件处理,调用该方法进入程序的主循环直到调用exit()结束。主事件循环从窗口系统接收事件,并将其分派给应用程序小部件。如果没有该方法,那么在运行的时候还没有进入程序的主循环就直接结束了,所以运行的时候窗口会闪退。
app.exec_()在退出时会返回状态代码

sys.exit(n): 

不用sys.exit(app.exec_()),只使用app.exec_(),程序也可以正常运行,但是关闭窗口后进程却不会退出。

sys.exit(n)的作用是退出应用程序并返回n到父进程。

 参考文章:


原文链接:https://blog.csdn.net/cuicui_ruirui/article/details/102873528

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

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

相关文章

浅谈无线温度监控系统在低功耗开关柜中的应用

安科瑞 华楠 摘要:为了能够实现实时监测高压开关柜的温度状况,提出一种基于无线传感器网络的开关柜温度在线监测系统。设计的无线温度在线监测系统不仅解决了开关柜内高温、高压、强电磁感应等在恶劣环境下不易检测的问题,而且从硬件选择和软…

谷粒商城篇章4 ---- P102-P172【分布式高级篇一】

目录 1. Elasticsearch 1.1 基本概念 1.1.1 Index(索引) 1.1.2 Type(类型) 1.1.3 Document(文档) 1.1.4 倒排索引机制 1.2 Docker安装 ES 1.2.1 下载镜像文件 1.2.2 运行 Elasticsearch 1.3 初步…

mongodb,redis,mysql 区别

一、MySQL 关系型数据库。 在不同的引擎上有不同 的存储方式。 查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。 开源数据库的份额在不断增加,mysql的份额页在持续增长。 缺点就是在海量数据处理的时候效率会显著变慢。 二、Mo…

C基础day8(2023.7.10)

一、Xmind整理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;基本类型参数 #include <stdio.h> #include <string.h> #include <stdlib.h> //传参&#xff1a;被调函数需要使用主调函数的局部变量&#xff0c;传参 void Sum(char a,char b);//被…

模拟电路(PHY)的端接电阻(terminator)

电气终端&#xff08;英语&#xff1a;electrical termination&#xff09;&#xff0c;是使传输线的末端的负载与传输线特性阻抗相匹配&#xff0c;以避免信号在末端反射的措施。实现电气终端的装置是端接器&#xff08;英语&#xff1a;terminator&#xff09;&#xff0c;有…

《向量数据库指南》——向量数据库的技术挑战和优势

目录 技术挑战 向量数据库的优势 技术挑战 在前面,我列出了向量数据库应该具有的理想功能,然后将向量数据库与向量搜索库和向量搜索插件进行比较。现在,让我们简单来了解一下向量数据库的技术挑战。未来的教程中,我们将介绍 Milvus 是如何解决这些问题的,以及这些技术是…

一个月学通Python(十六):Django模型深入理解(Web开发)

专栏介绍 结合自身经验和内部资料总结的Python教程&#xff0c;每天3章&#xff0c;1个月就能全方位的完成Python的学习并进行实战开发&#xff0c;学完了定能成为大佬&#xff01;加油吧&#xff01;卷起来&#xff01; 全部文章请访问专栏&#xff1a;《Python全栈教程&…

Openlayers实战:加载高德地图

在国内地图市场上,高德地图占据了重要的地位。Openlayers可以加载高德地图,这其中根据不同的参数,可以显示遥感地图,矢量地图等,可以显示中文,英文。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN) * @此源代码版权归大剑师兰特所有…

flutter页面添加透明遮罩

路由工具 import package:test/main.dart; import package:flutter/material.dart;import circle_page_route.dart;class NavigatorUtil {static push(Widget page, {BuildContext context}) {return Navigator.push(context ?? navigatorKey.currentContext,MaterialPageRo…

津津乐道设计模式 - 迭代器模式详解(以购物车的场景来演示迭代器模式)

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

【C++】priority_queue使用与模拟实现

认识priority_queue 1、priority_queue(优先级队列)是一种容器适配器&#xff0c;底层是一个完全二叉树的大堆&#xff08;堆总是一颗完全二叉树&#xff0c;根结点最大的堆叫做大堆&#xff1b;根结点最小的堆叫做小堆&#xff09;&#xff0c;头文件在queue中&#xff0c;根…

simple RNN pytorch代码实现

simple RNN pytorch代码实现 在写这篇博客之前&#xff0c;博主要说一件事情&#xff0c;网上的simple RNN代码很多都是错误的&#xff0c;博主的也是错误的&#xff0c;为什么呢&#xff1f; 因为simple RNN的梯度下降代码必须自己去写&#xff0c;simple RNN的梯度下降不能使…

巧用浮动布局、解决高度塌陷实例分享

问题 如图所示&#xff0c;这种效果该怎么实现呢&#xff1f; 面包屑导航和按钮一行两端显示面包屑或编辑栏超出宽度则自动另行显示 实现 采用浮动&#xff0c;绿色块左浮&#xff0c;蓝色块右浮&#xff0c;利用浮动特性实现宽度超出另一行显示的效果&#xff0c;并是动态的…

ModaHub魔搭社区:什么是非结构化数据?

目录 概览 区分结构化、半结构化和非结构化数据 结构化数据示例 欢迎来到向量数据库 101 系列教程。 概览 这是向量数据库 101 系列教程第一课,主要向大家介绍一下非结构化数据。 现在我们每天都会产生新的数据,这无疑是全球一体化和全球经济的关键动力。从腕部佩戴的…

【NLP】国外新动态--LLM模型

一、说明 NLP走势如何&#xff1f;这是关于在实践中使用大型语言模型&#xff08;LLM&#xff09;的系列文章中的一篇文章。在这里&#xff0c;我将介绍LLM&#xff0c;并介绍使用它们的3个级别。未来的文章将探讨LLM的实际方面&#xff0c;例如如何使用OpenAI的公共API&#x…

面试题更新之-css中link和@import的区别

文章目录 导文link是什么&#xff1f;import是什么&#xff1f;css中link和import的区别 导文 面试题更新之-css中link和import的区别 link是什么&#xff1f; CSS Link是用于将外部CSS文件链接到HTML文档中的HTML标签。通过使用CSS Link标签&#xff0c;可以将外部的CSS样式表…

游戏测试与策划的那些事儿

作为一个游戏测试员&#xff0c;和程序、前端、策划之间的沟通交流在所难免。今天就来吐槽一下子啦~ 作为游戏测试的核心机密&#xff0c;可不能被他们知道我们在背后吐槽啦~ 游戏测试&#xff1a;XXX&#xff0c;刚测完这数据怎么和之前的不一样了&#xff1f; 策划&#xff1…

Python分布式任务队列Celery

一、分布式任务队列Celery介绍 Python celery是一个基于Python的分布式任务队列&#xff0c;主要用于任务的异步执行、定时调度和分布式处理。它采用了生产者/消费者模式&#xff0c;通过消息中间件实现多个工作者进程之间的协作。 Python celery的架构主要包括以下组件&…

new和不用new调用构造函数,有什么区别?

new和不用new的构造函数&#xff0c;有什么区别&#xff1f; 下面从有return和无return,如果在有return的情况下&#xff0c;return原始类型数据和return引用应用类型数据等几方面进行论述&#x1f44d;&#x1f44d;&#x1f44d; 区别1&#xff1a;当没有return时 functio…

Bus消息总线(在Spring Cloud整合Bus(idea19版本)

Bus消息总线 所谓消息总线Bus&#xff0c;即我们经常会使用MQ消息代理构建一个共用的Topic&#xff0c;通过这个Topic连接各个微服务实例,MQ广播的消息会被所有在注册中心的微服务实例监听和消费。换言之就是通过一个主题连接各个微服务&#xff0c;打通脉络 Spring Cloud Bus …