当前位置: 首页 > news >正文

【PyQt】超级超级笨的pyqt计算器案例

计算器

1.QT Designer设计外观

  • 1.pushButton
  • 2.textEdit
  • 3.groupBox
  • 4.布局设计
    在这里插入图片描述

2.加载ui文件

导入模块:
  • sys:用于处理命令行参数。

  • QApplication:PyQt5 应用程序类。

  • QWidget:窗口基类。

  • uic:用于加载 .ui 文件。

  • QIcon:用于设置窗口图标。

MyWindow 类:
  • 继承自 QWidget,用于创建主窗口。

  • init 方法中调用 self.init_ui() 初始化界面。

  • init_ui 方法中加载 .ui 文件并设置窗口图标和标题。

加载 .ui 文件:
  • 使用 uic.loadUi(“./计算器.ui”) 加载 .ui 文件,并将其赋值给 self.ui。

  • self.ui 是一个包含 .ui 文件中所有控件的对象。

设置窗口图标和标题:
  • 使用 setWindowIcon 设置窗口图标。

  • 使用 setWindowTitle 设置窗口标题。

显示窗口:
  • 在 if name == “main”: 中创建 QApplication 和 MyWindow 实例,并调用 w.ui.show() 显示窗口。
import sysfrom PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import uicclass MyWindow(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):self.ui = uic.loadUi("./计算器.ui")print(self.ui.__dict__)  # 查看ui文件中有哪些控件self.ui.setWindowIcon(QIcon('img.png'))self.ui.setWindowTitle("傻瓜计算器")  # 修改标题的名称
if __name__=="__main__":app = QApplication(sys.argv)w = MyWindow()# 展示窗口w.ui.show()app.exec()

代码解释

超级呆瓜的初始化,刚开始学习QT有点呆,欢迎大家讨论,共同进步

    def __init__(self):super().__init__()self.init_ui()def init_ui(self):self.ui = uic.loadUi("./计算器.ui",self)# print(self.ui.__dict__)  # 查看ui文件中有哪些控件self.ui.setWindowIcon(QIcon('img.png'))self.ui.setWindowTitle("计算器")  # 修改标题的名称self.x = ""# 初始化控件self.textEdit = self.ui.textEdit # 计算过程框self.textEdit_2 = self.ui.textEdit_2 # 计算结果框self.pushButton_1=self.ui.pushButton_1 # C :清零self.pushButton_2 = self.ui.pushButton_2 # X:后退一格self.pushButton_3 = self.ui.pushButton_3 # %:百分号self.pushButton_4 = self.ui.pushButton_4 # /:除号self.pushButton_5 = self.ui.pushButton_5 # 7self.pushButton_6 = self.ui.pushButton_6 # 8self.pushButton_7 = self.ui.pushButton_7 # 9self.pushButton_8 = self.ui.pushButton_8 # *:乘号self.pushButton_9 = self.ui.pushButton_9 # 4self.pushButton_10 = self.ui.pushButton_10 # 5self.pushButton_11 = self.ui.pushButton_11 # 6self.pushButton_12 = self.ui.pushButton_12 # -:减法self.pushButton_13 = self.ui.pushButton_13 # 1self.pushButton_14 = self.ui.pushButton_14 # 2self.pushButton_15 = self.ui.pushButton_15 # 3self.pushButton_16 = self.ui.pushButton_16 # +:加法self.pushButton_17 = self.ui.pushButton_17 # eself.pushButton_18 = self.ui.pushButton_18 # 0self.pushButton_19 = self.ui.pushButton_19 # .self.pushButton_20 = self.ui.pushButton_20 # =:等号# 设置框的样式self.textEdit.setText("0")self.textEdit.setAlignment(Qt.AlignRight)  # # 设置文本右对齐self.textEdit.setReadOnly(True)  # 只能进行读取self.textEdit.setStyleSheet("font-size: 24px; height: 60px;")  # 设置字体样式self.textEdit_2.setText("result")self.textEdit_2.setAlignment(Qt.AlignRight)  # # 设置文本右对齐self.textEdit_2.setReadOnly(True)  # 只能进行读取self.textEdit_2.setStyleSheet("font-size: 24px; height: 60px;")  # 设置字体样式# 设置按钮格式for i in range(20):x = f"pushButton_{i+1}"self.pushButton_name = getattr(self, x)  # 动态访问按钮对象self.pushButton_name.setStyleSheet("font-size: 18px; padding: 10px;")self.text = self.pushButton_name.text()self.pushButton_name.clicked.connect(lambda _, t=self.text: self.on_button_click(t))

简单的计算功能

  • 清零
  • 计算结果
  • 显示文本
    def on_button_click(self, text):# 可以获取所有符号print(text)if text == 'C':self.reset_calculator()elif text == '=':self.calculate_result()else:self.text_shaw(text)

清零

    def reset_calculator(self):self.textEdit.clear()self.textEdit.setText("0")self.textEdit.setAlignment(Qt.AlignRight)  # 设置文本右对齐self.textEdit.setReadOnly(True)  # 只能进行读取self.textEdit_2.setText("....")self.textEdit_2.setAlignment(Qt.AlignRight)  # 设置文本右对齐self.textEdit_2.setReadOnly(True)  # 只能进行读取self.x = ""

计算结果

    def calculate_result(self):all_text =  self.textEdit.toPlainText()print(all_text)print(type(all_text))try:result = sp.sympify(all_text)print(f"表达式 '{all_text}' 的计算结果是: {result}")self.textEdit_2.setText(f"{result}")self.textEdit_2.setAlignment(Qt.AlignRight)except sp.SympifyError as e:print(f"无法解析表达式: {e}")

显示文本

    def text_shaw(self,text):self.x += f"{text}"self.textEdit.setText(self.x)self.textEdit.setAlignment(Qt.AlignRight)

键盘输出

    def keyPressEvent(self, event):key = event.text()print(key)if key in '0123456789.+-*/':self.on_button_click(key)print(key)elif event.key() in (Qt.Key_Enter, Qt.Key_Return):self.on_button_click('=')elif event.key() == Qt.Key_Escape:self.reset_calculator()

整体代码

import sys
import re
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit
from PyQt5 import uic
import sympy as sp #计算的库,可以实现四则运算class MyWindow(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):self.ui = uic.loadUi("./计算器.ui",self)# print(self.ui.__dict__)  # 查看ui文件中有哪些控件self.ui.setWindowIcon(QIcon('img.png'))self.ui.setWindowTitle("计算器")  # 修改标题的名称self.x = ""# 初始化控件self.textEdit = self.ui.textEdit # 计算过程框self.textEdit_2 = self.ui.textEdit_2 # 计算结果框self.pushButton_1=self.ui.pushButton_1 # C :清零self.pushButton_2 = self.ui.pushButton_2 # X:后退一格self.pushButton_3 = self.ui.pushButton_3 # %:百分号self.pushButton_4 = self.ui.pushButton_4 # /:除号self.pushButton_5 = self.ui.pushButton_5 # 7self.pushButton_6 = self.ui.pushButton_6 # 8self.pushButton_7 = self.ui.pushButton_7 # 9self.pushButton_8 = self.ui.pushButton_8 # *:乘号self.pushButton_9 = self.ui.pushButton_9 # 4self.pushButton_10 = self.ui.pushButton_10 # 5self.pushButton_11 = self.ui.pushButton_11 # 6self.pushButton_12 = self.ui.pushButton_12 # -:减法self.pushButton_13 = self.ui.pushButton_13 # 1self.pushButton_14 = self.ui.pushButton_14 # 2self.pushButton_15 = self.ui.pushButton_15 # 3self.pushButton_16 = self.ui.pushButton_16 # +:加法self.pushButton_17 = self.ui.pushButton_17 # eself.pushButton_18 = self.ui.pushButton_18 # 0self.pushButton_19 = self.ui.pushButton_19 # .self.pushButton_20 = self.ui.pushButton_20 # =:等号# 设置框的样式self.textEdit.setText("0")self.textEdit.setAlignment(Qt.AlignRight)  # # 设置文本右对齐self.textEdit.setReadOnly(True)  # 只能进行读取self.textEdit.setStyleSheet("font-size: 24px; height: 60px;")  # 设置字体样式self.textEdit_2.setText("result")self.textEdit_2.setAlignment(Qt.AlignRight)  # # 设置文本右对齐self.textEdit_2.setReadOnly(True)  # 只能进行读取self.textEdit_2.setStyleSheet("font-size: 24px; height: 60px;")  # 设置字体样式# 设置按钮格式for i in range(20):x = f"pushButton_{i+1}"self.pushButton_name = getattr(self, x)  # 动态访问按钮对象self.pushButton_name.setStyleSheet("font-size: 18px; padding: 10px;")self.text = self.pushButton_name.text()self.pushButton_name.clicked.connect(lambda _, t=self.text: self.on_button_click(t))# 实现了按键显示def on_button_click(self, text):# 可以获取所有符号print(text)if text == 'C':self.reset_calculator()elif text == '=':self.calculate_result()else:self.text_shaw(text)def reset_calculator(self):self.textEdit.clear()self.textEdit.setText("0")self.textEdit.setAlignment(Qt.AlignRight)  # 设置文本右对齐self.textEdit.setReadOnly(True)  # 只能进行读取self.textEdit_2.setText("....")self.textEdit_2.setAlignment(Qt.AlignRight)  # 设置文本右对齐self.textEdit_2.setReadOnly(True)  # 只能进行读取self.x = ""def calculate_result(self):all_text =  self.textEdit.toPlainText()print(all_text)print(type(all_text))try:result = sp.sympify(all_text)print(f"表达式 '{all_text}' 的计算结果是: {result}")self.textEdit_2.setText(f"{result}")self.textEdit_2.setAlignment(Qt.AlignRight)except sp.SympifyError as e:print(f"无法解析表达式: {e}")result = re.split(r"([+*/-])", all_text) # 保留分隔符print(result)def text_shaw(self,text):self.x += f"{text}"self.textEdit.setText(self.x)self.textEdit.setAlignment(Qt.AlignRight)def keyPressEvent(self, event):key = event.text()print(key)if key in '0123456789.+-*/':self.on_button_click(key)print(key)elif event.key() in (Qt.Key_Enter, Qt.Key_Return):self.on_button_click('=')elif event.key() == Qt.Key_Escape:self.reset_calculator()if __name__=="__main__":app = QApplication(sys.argv)w = MyWindow()w.ui.show()app.exec()

界面展示
在这里插入图片描述
有任何问题可以联系我,欢迎大家来讨论,共同进步。

相关文章:

【PyQt】超级超级笨的pyqt计算器案例

计算器 1.QT Designer设计外观 1.pushButton2.textEdit3.groupBox4.布局设计 2.加载ui文件 导入模块: sys:用于处理命令行参数。 QApplication:PyQt5 应用程序类。 QWidget:窗口基类。 uic:用于加载 .ui 文件。…...

Git 的起源与发展

序章:版本控制的前世今生 在软件开发的漫长旅程中,版本控制犹如一位忠诚的伙伴,始终陪伴着开发者们。它的存在,解决了软件开发过程中代码管理的诸多难题,让团队协作更加高效,代码的演进更加有序。 简单来…...

预防和应对DDoS的方法

DDoS发起者通过大量的网络流量来中断服务器、服务或网络的正常运行,通常由多个受感染的计算机或联网设备(包括物联网设备)发起。 换种通俗的说法,可以将其想象成高速公路上的一次突然的大规模交通堵塞,阻止了正常的通勤…...

51单片机开发:独立按键实验

实验目的:按下键盘1时,点亮LED灯1。 键盘原理图如下图所示,可见,由于接GND,当键盘按下时,P3相应的端口为低电平。 键盘按下时会出现抖动,时间通常为5-10ms,代码中通过延时函数delay…...

02.04 数据类型

请写出以下几个数据的类型: 整数 a ----->int a的地址 ----->int* 存放a的数组b ----->int[] 存放a的地址的数组c ----->int*[] b的地址 ----->int* c的地址 ----->int** 指向printf函数的指针d ----->int (*)(const char*, ...) …...

FPGA学习篇——开篇之作

今天正式开始学FPGA啦,接下来将会编写FPGA学习篇来记录自己学习FPGA 的过程! 今天是大年初六,简单学一下FPGA的相关概念叭叭叭! 一:数字系统设计流程 一个数字系统的设计分为前端设计和后端设计。在我看来&#xff0…...

【Cadence仿真技巧学习笔记】求解65nm库晶体管参数un, e0, Cox

在设计放大器的第一步就是确定好晶体管参数和直流工作点的选取。通过阅读文献,我了解到L波段低噪声放大器的mos器件最优宽度计算公式为 W o p t . p 3 2 1 ω L C o x R s Q s p W_{opt.p}\frac{3}{2}\frac{1}{\omega LC_{ox}R_{s}Q_{sp}} Wopt.p​23​ωLCox​Rs…...

【RocketMQ】RocketMq之IndexFile深入研究

一:RocketMq 整体文件存储介绍 存储⽂件主要分为三个部分: CommitLog:存储消息的元数据。所有消息都会顺序存⼊到CommitLog⽂件当中。CommitLog由多个⽂件组成,每个⽂件固定⼤⼩1G。以第⼀条消 息的偏移量为⽂件名。 ConsumerQue…...

小白零基础--CPP多线程

进程 进程就是运行中的程序线程进程中的进程 1、C11 Thread线程库基础 #include <iostream> #include <thread> #include<string>void printthread(std::string msg){std::cout<<msg<<std::endl;for (int i 0; i < 1000; i){std::cout<…...

利用deepseek参与软件测试 基本架构如何 又该在什么环节接入deepseek

利用DeepSeek参与软件测试&#xff0c;可以考虑以下基本架构和接入环节&#xff1a; ### 基本架构 - **数据层** - **测试数据存储**&#xff1a;用于存放各种测试数据&#xff0c;包括正常输入数据、边界值数据、异常数据等&#xff0c;这些数据可以作为DeepSeek的输入&…...

大模型微调技术总结及使用GPU对VisualGLM-6B进行高效微调

1. 概述 在深度学习中&#xff0c;微调&#xff08;Fine-tuning&#xff09;是一种重要的技术&#xff0c;用于改进预训练模型的性能。在预训练模型的基础上&#xff0c;针对特定任务&#xff08;如文本分类、机器翻译、情感分析等&#xff09;&#xff0c;使用相对较小的有监…...

WPF进阶 | WPF 样式与模板:打造个性化用户界面的利器

WPF进阶 | WPF 样式与模板&#xff1a;打造个性化用户界面的利器 一、前言二、WPF 样式基础2.1 什么是样式2.2 样式的定义2.3 样式的应用 三、WPF 模板基础3.1 什么是模板3.2 控件模板3.3 数据模板 四、样式与模板的高级应用4.1 样式继承4.2 模板绑定4.3 资源字典 五、实际应用…...

Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

自动化构建-make/Makefile 【Linux基础开发工具】

文章目录 一、背景二、Makefile编译过程三、变量四、变量赋值1、""是最普通的等号2、“:” 表示直接赋值3、“?” 表示如果该变量没有被赋值&#xff0c;4、""和写代码是一样的&#xff0c; 五、预定义变量六、函数**通配符** 七、伪目标 .PHONY八、其他常…...

python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像匹配

【1】引言 前序学习了图像的常规读取和基本按位操作技巧&#xff0c;相关文章包括且不限于&#xff1a; python学opencv|读取图像-CSDN博客 python学opencv|读取图像&#xff08;四十九&#xff09;原理探究&#xff1a;使用cv2.bitwise()系列函数实现图像按位运算-CSDN博客…...

通信方式、点对点通信、集合通信

文章目录 从硬件PCIE、NVLINK、RDMA原理到通信NCCL、MPI原理&#xff01;通信实现方式&#xff1a;机器内通信、机器间通信通信实现方式&#xff1a;通讯协调通信实现方式&#xff1a;机器内通信&#xff1a;PCIe通信实现方式&#xff1a;机器内通信&#xff1a;NVLink通信实现…...

TCP编程

1.socket函数 int socket(int domain, int type, int protocol); 头文件&#xff1a;include<sys/types.h>&#xff0c;include<sys/socket.h> 参数 int domain AF_INET: IPv4 Internet protocols AF_INET6: IPv6 Internet protocols AF_UNIX, AF_LOCAL : Local…...

OpenAI 实战进阶教程 - 第七节: 与数据库集成 - 生成 SQL 查询与优化

内容目标 学习如何使用 OpenAI 辅助生成和优化多表 SQL 查询了解如何获取数据库结构信息并与 OpenAI 结合使用 实操步骤 1. 创建 SQLite 数据库示例 创建数据库及表结构&#xff1a; import sqlite3# 连接 SQLite 数据库&#xff08;如果不存在则创建&#xff09; conn sq…...

Apache Iceberg数据湖技术在海量实时数据处理、实时特征工程和模型训练的应用技术方案和具体实施步骤及代码

Apache Iceberg在处理海量实时数据、支持实时特征工程和模型训练方面的强大能力。Iceberg支持实时特征工程和模型训练&#xff0c;特别适用于需要处理海量实时数据的机器学习工作流。 Iceberg作为数据湖&#xff0c;以支持其机器学习平台中的特征存储。Iceberg的分层结构、快照…...

QT交叉编译环境搭建(Cmake和qmake)

介绍一共有两种方法&#xff08;基于qmake和cmake&#xff09;&#xff1a; 1.直接调用虚拟机中的交叉编译工具编译 2.在QT中新建编译套件kits camke和qmake的区别&#xff1a;CMake 和 qmake 都是自动化构建工具&#xff0c;用于简化构建过程&#xff0c;管理编译设置&…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...