MMCLMC公差计算.exe

news2024/10/7 8:29:11

一、概要

  软件及完整代码请戳这里:MMC&LMC公差计算软件及代码
图1

图1 软件操作界面

  本软件功能主要是根据实际应用选择MMR或者LMR原则,输入基本尺寸、形位公差尺寸和实际测量尺寸,即可计算出对应的公差值。以孔的MMR为例见如图2、3,当测量出的直径为φ8.16时,则对应的垂直度公差为0.02。
在这里插入图片描述

图2 MMR孔的标注

在这里插入图片描述

图3 MMR孔尺寸对应公差值

  开发本软件的原因主要有以下几点:

  1. 提高设计效率:通过这款软件,工程师可以快速计算实测尺寸对应公差,减少繁琐的手动计算,提高设计效率。
  2. 增强设计准确性:该软件基于严谨的数学模型和算法进行计算,避免了手动计算可能出现的错误,提高了设计的准确性。
  3. 方便易用:该软件具备友好的用户界面,使得用户可以便捷地进行操作,输入参数即可得到结果,省去了繁琐的手动计算过程。

二、技术细节

1、class national_standard_Dialog(QDialog)

# GBT16671-2018对话框
class national_standard_Dialog(QDialog):
    def __init__(self, parent=None):
        super(national_standard_Dialog, self).__init__(parent)
        self.setWindowTitle('GB/T 16671-2018 产品几何技术规范(GPS) 几何公差 最大实体要求(MMR)、最小实体要求(LMR)和可逆要求(RPR)')
        self.icon = QtGui.QIcon()
        self.icon.addPixmap(
            QtGui.QPixmap(r".\icon\GB.ico"),
            QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.setWindowIcon(self.icon)
        self.setGeometry(0, 0, 1000, 800)  # 设置窗口初始位置和大小
        self.setFixedSize(1000, 800)  # 设置窗口固定大小
        self.layout = QVBoxLayout()
        self.scroll_area = QScrollArea()
        self.graphics_view = QGraphicsView(self.scroll_area)
        self.graphics_view.setViewportUpdateMode(QGraphicsView.FullViewportUpdate)  # 这是关键的改变,使 QGraphicsView 根据 QPixmap 的大小进行自适应调整
        self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.scroll_area.setWidgetResizable(True)
        self.scroll_area.setWidget(self.graphics_view)
        self.layout.addWidget(self.scroll_area)
        self.setLayout(self.layout)
        self.scene = QGraphicsScene()
        self.graphics_view.setScene(self.scene)
        pixmap = QPixmap(QPixmap(r".\statics\GBT16671-2018.png").scaled(750, 41362, Qt.KeepAspectRatio))  # 创建新的 QPixmap,宽度为 950
        item = self.scene.addPixmap(pixmap)
        item.setFlag(QGraphicsItem.ItemIsMovable)  # 可以被用户拖动,但我们后面会禁止这个功能
        self.graphics_view.setInteractive(False)  # 禁止所有的用户交互,包括拖动

        # 初始设置滚动条可滚动并显示
        self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)

        # 将窗口移动到屏幕中心
        screen = QApplication.primaryScreen()
        screen_rect = screen.geometry()
        width = screen_rect.width()
        height = screen_rect.height()
        pos_x = int((width / 2) - (self.width() / 2))
        pos_y = int((height / 2) - (self.height() / 2))
        self.move(pos_x, pos_y)

  这段代码是使用Python的PyQt5库来创建一个名为national_standard_Dialog的自定义对话框。以下是代码的完整架构流程和具体的技术细节:

  1. 初始化(init:在national_standard_Dialog类的__init__方法中,首先通过调用父类的__init__方法来初始化对话框的基本属性。然后,设置对话框的标题和图标。图标使用QIcon类加载本地的.ico文件,并将其设置为对话框的窗口图标。之后,设置了对话框的初始位置和大小,以及固定大小。
  2. 布局设置:使用QVBoxLayout作为对话框的布局,这表示所有添加到对话框中的控件都会按照垂直方向(从上到下)进行排列。然后,创建了一个QScrollArea,并设置其水平和垂直滚动条政策为根据需要进行滚动。
  3. Graphics View:创建了一个QGraphicsView,并将其设置为QScrollArea的widget。QGraphicsView是用于显示QGraphicsScene(这里是self.scene)的视图。在此处,设置了视图的更新模式为FullViewportUpdate,这意味着当QGraphicsScene的内容发生变化时,QGraphicsView会立即更新其显示。
  4. 创建并设置Graphics Scene:创建了一个QGraphicsScene,并将其设置为QGraphicsView的场景。然后,加载并缩放了一张图片(从.png文件),并将其添加到场景中。图片可以通过拖动和交互进行移动,但通过设置QGraphicsView的交互模式为False,禁止了所有的用户交互,包括拖动。
  5. 滚动条设置:再次设置了滚动条的政策为根据需要进行滚动。这是因为之前在设置QScrollArea时已经设置过了,这里是为了重新设置一下。
  6. 移动窗口至屏幕中央:获取屏幕的大小和位置,并将对话框移动到屏幕的中央。这是通过计算对话框的中心点位置并与屏幕的中心点位置相匹配来实现的。

  总的来说,这个对话框的主要功能是显示一个带有可拖动图片的视图,图片和视图都可以根据需要进行滚动。同时,窗口会默认移动到屏幕中央。

2、class version_Dialog(QDialog)

# 关于软件对话框
class version_Dialog(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setObjectName("Dialog")

        self.icon = QtGui.QIcon()
        self.icon.addPixmap(
            QtGui.QPixmap(r".\icon\版本.ico"),
            QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.setWindowIcon(self.icon)

        self.resize(420, 270)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
        self.setSizePolicy(sizePolicy)
        self.setMinimumSize(QtCore.QSize(420, 270))
        self.setMaximumSize(QtCore.QSize(420, 270))
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.version_textEdit = QtWidgets.QTextEdit(self)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.version_textEdit.sizePolicy().hasHeightForWidth())
        self.version_textEdit.setSizePolicy(sizePolicy)
        self.version_textEdit.setMinimumSize(QtCore.QSize(400, 250))
        self.version_textEdit.setMaximumSize(QtCore.QSize(400, 250))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.version_textEdit.setFont(font)
        self.version_textEdit.setStyleSheet("font: 12pt \"Times New Roman\";")
        self.version_textEdit.setObjectName("version_textEdit")
        self.version_textEdit.setReadOnly(True)  # 禁止编辑version_textEdit
        self.gridLayout.addWidget(self.version_textEdit)

        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("Dialog", "版本"))
        self.version_textEdit.setHtml(_translate("Dialog",
                                                 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
                                                 "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
                                                 "p, li { white-space: pre-wrap; }\n"
                                                 "</style></head><body style=\" font-family:\'Times New Roman\'; font-size:12pt; font-weight:400; font-style:normal;\">\n"
                                                 "<p align=\"justify\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">Version:V1.0.20231028</span></p>\n"
                                                 "<p align=\"justify\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">Author:Leuanghing Chen</span></p>\n"
                                                 "<p align=\"justify\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">Blog:https://blog.csdn.net/weixin_46153372?spm=1010.2135.3001.5421</span></p></body></html>"))

  这段代码是使用Python的PyQt5库来创建一个名为version_Dialog的自定义对话框。以下是代码的完整架构流程和具体的技术细节:

  1. 初始化(init:在version_Dialog类的__init__方法中,首先通过调用父类的__init__方法来初始化对话框的基本属性。然后,设置对话框的标题和图标。图标使用QIcon类加载本地的.ico文件,并将其设置为对话框的窗口图标。之后,设置了对话框的初始位置和大小,以及固定大小。
  2. 设置对话框大小和布局:使用QGridLayout作为对话框的布局,这表示所有添加到对话框中的控件都会按照网格形式进行排列。然后,创建了一个QTextEdit,并将其设置为只读,禁止编辑。
  3. 设置文本编辑框样式:为QTextEdit设置字体、大小和样式表,使其内容以"Times New Roman"字体显示,字体大小为12pt。
  4. 添加控件到布局:将QTextEdit添加到布局中。
  5. 设置对话框标题:使用QCoreApplication.translate方法设置对话框的标题。
  6. 设置对话框大小和位置:设置了对话框的最小、最大和固定大小。然后,获取屏幕的大小和位置,并将对话框移动到屏幕的中央。
  7. 设置文本编辑框内容:在文本编辑框中设置HTML内容。注意,这里没有提供HTML内容的具体实现,所以在文本编辑框中设置HTML内容的方法为空。

  总的来说,这个对话框的主要功能是显示一个带有文本编辑框的视图,文本编辑框的内容为版本信息,且不可编辑。同时,窗口会默认移动到屏幕中央。

三、完整代码

  软件及完整代码请戳这里:MMC&LMC公差计算软件及代码

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

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

相关文章

SpringCloud-高级篇(十六)

前面学习了Lua的语法&#xff0c;就可以在nginx去做编程&#xff0c;去实现nginx类里面的业务&#xff0c;查询Redis&#xff0c;查询tomcat等 &#xff0c;业务逻辑的编写依赖于其他组件&#xff0c;这些组件会用到OpenResty的工具去实现 &#xff08;1&#xff09;安装OpenRe…

不熟悉现货白银的震荡行情?你可以试着这样理解

在现货白银交易中&#xff0c;投资者很不想碰到震荡行情&#xff0c;因为震荡行情说明市场没有明确的趋势&#xff0c;而是倾向于横向波动&#xff0c;因此没有潜在风险较低且潜在盈利较大的顺势交易机会。可不幸的是&#xff0c;在市场中大部分时间市场还是会倾向横向震荡&…

WhatsApp首次营销模板怎么写?WhatsApp营销效果怎么样?

近年来&#xff0c;随着社交媒体的飞速发展&#xff0c;WhatsApp作为一种全球通用的即时通讯应用程序&#xff0c;在营销领域备受重视。很多企业开始利用WhatsApp这一平台与客户进行沟通和营销推广活动。本文将探讨WhatsApp首次营销模板如何编写以及其所带来的效果。 首先&…

MG7050VAN 基于声表的差分多输出 晶体振荡器(LVDS)

MG7050VAN的LVDS输出是一款差分多输出晶体振荡器&#xff0c;具有极低的抖动和超强的稳定性。该振荡器适用于多种应用场景&#xff0c;如服务器、存储器和网络仪器等。作为一款高端的LVDS输出设备&#xff0c;该振荡器在输出性能上具有明显优势。其超低抖动水平可以达到0.3ps M…

【机器学习】强化学习(七)-策略梯度算法-REINFORCE 训练月球着陆器代理(智能体)...

概 述 月球着陆器代理是一个模拟飞行器在月球表面着陆的环境&#xff0c;它有八个连续的状态变量&#xff0c;分别是水平坐标、垂直坐标、水平速度、垂直速度、角度、角速度、腿1触地、腿2触地。它有四个离散的动作&#xff0c;分别是什么都不做、发动左方向引擎、发动主引擎、…

情人节爆品出现!单周GMV暴涨6成,直冲20K美金,节庆用品赛道迎来“爆单潮”!

2024新年钟声已经敲响&#xff0c;一大波节日爆品正在疯狂涌现&#xff0c;而这只是一个开始。 开年首月电商流量一波接一波来袭&#xff0c;下一个“消费大节”已经在来的路上&#xff01;——情人节。 节日营销热点抢量&#xff0c;宜早不宜晚。商家们纷纷开始上新节庆相关…

【详解】贪吃蛇游戏----下篇(完整源码)

目录 引入&#xff1a; 本片文章目的&#xff1a; 整个游戏的实现流程图如下&#xff1a; 游戏实现 GameRun PrintHelpInfo Pause NextIsFood printSnake EatFood NoFood KillByWall KillBySelf GameRun GameEnd 总代码&#xff1a; &#xff08;1&#xff09…

【Linux】Linux权限的概念 -- 详解

一、Linux 中的用户 Linux 下有两种用户&#xff1a; 超级用户&#xff08;root&#xff09;&#xff1a;可以在 Linux 系统下做任何事情&#xff0c;不受限制。普通用户&#xff1a;在 Linux 下做有限的事情。 超级用户的命令提示符是 “#”&#xff0c;普通用户的命令提示符…

【算法专题】动态规划综合篇

动态规划7.0 1. 最长公共子序列2. 不相交的线3. 不同的子序列4. 通配符匹配5. 正则表达式匹配6. 交错字符串7. 两个字符串的最小ASCII删除和8. 最长重复子数组 1. 最长公共子序列 题目链接 -> Leetcode -1143.最长公共子序列 Leetcode -1143.最长公共子序列 题目&#xf…

操作系统论述题+第5、6、7、8、9章的知识小点总结(尤其是选择题)

文章目录 一、操作系统论述题怎么提高内存利用率&#xff1f;怎么提高CPU利用率&#xff1f;怎么提高操作系统并发度&#xff1f;这个答案也不知道是什么问题里面的 二、操作系统5、6、7、8、9章选择题知识点第五章&#xff1a;存储器管理第六章&#xff1a;虚拟存储器第七章&a…

【笔试常见编程题03】统计回文、连续最大和、不要二、把字符串转换成整数

1. 统计回文 “回文串”是一个正读和反读都一样的字符串&#xff0c;比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串&#xff0c;生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串…

如何通俗解释Docker是什么?

要想弄懂Docker&#xff0c;咱们得先从“容器化”讲起。 一、容器化技术及Docker的出现 容器化&#xff0c;它是一种轻量级、可移植的软件打包方式&#xff0c;你就想象成一个快递箱子&#xff0c;里面装着你的应用和所有需要运行的环境&#xff0c;这个箱子能在任何支持容器…

promethues基础概念

promethues是一个开源的系统监控以及报警系统&#xff0c;整个zabbix的功能&#xff0c;系统&#xff0c;网络&#xff0c;设备 promethues可以兼容网络和设置被&#xff0c;容器监控&#xff0c;告警系统&#xff0c;因为他和k8s是一个项目基金开发的产品&#xff0c;天生匹配…

【漏洞复现】中移铁通禹路由器信息泄露漏洞

Nx01 产品简介 中移禹路由器支持宽带拨号、动态IP和静态IP三种上网模式,一般中国移动宽带的光猫都是智能光猫也就是光猫带路由器功能,中移禹路由器作为二级路由使用。 Nx02 漏洞描述 中移禹路由器ExportSettings处存在信息泄露漏洞&#xff0c;攻击者可以获取后台权限。 Nx03…

【机器学习】欠拟合与过拟合

过拟合&#xff1a;模型在训练数据上表现良好对不可见数据的泛化能力差。 欠拟合&#xff1a;模型在训练数据和不可见数据上泛化能力都很差。 欠拟合常见解决办法&#xff1a; &#xff08;1&#xff09;增加新特征&#xff0c;可以考虑加入特征组合、高次特征&#xff0c;以…

【Mac】windows PC用户转用Mac 配置笔记

win转mac使用的一些配置笔记&#xff1b;感觉mac在UI上还是略胜一筹&#xff0c;再配合在win上的操作习惯就体验更好了&#xff0c;对日常办公需求的本人足以。 优化设置 主要 操作优化 AltTab&#xff1a; win 习惯查看全部活动的alt键&#xff0c;对比cmdtab多了可以预览&…

【qt】switchBtn

方法1 在qtdesigner中设置按钮图标的三个属性&#xff0c;normal off 、normal on和checkabletrue。 from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5 import uic from switchBtn import Ui_Dialogclass Test(QDialog, Ui_…

手敲Mybatis(17章)-二级缓存功能,感受装饰器的魅力

1.目的 本节主要是讲Mybatis的二级缓存&#xff0c;一级缓存是会话SqlSession级别的&#xff0c;二级缓存是Mapper级别的这个大家都知道&#xff0c;一级缓存主要是同一个SqlSession实例才可以缓存&#xff0c;那么出现commit等其他情况可能清除缓存&#xff0c;我想要再发起的…

ABB机器人单周和连续运行模式切换的配置方法

ABB机器人单周和连续运行模式切换的配置方法 有朋友反映:示教器上已经选择了“连续”模式,在通过PLC远程控制ABB机器人启动时,机器人的运行模式会从“连续”自动切换到“单周”, 那么哪里可以设置该选项呢,大家可以参考以下内容: 用户可以在快速设置栏设置机器人运行的运…

Q-Bench:一种用于低级别视觉通用基础模型的基准测试

1. 引言 多模态大语言模型&#xff08;Multi-modality Large Language Models&#xff0c;后续简称多模态大模型&#xff09;能够提供强大的通用级别视觉感知/理解能力&#xff0c;甚至可以通过自然语言与人类进行无缝对话和互动。虽然多模态大模型的这些能力已经在多个视觉语…