一、概要
软件及完整代码请戳这里:MMC&LMC公差计算软件及代码
图1 软件操作界面
本软件功能主要是根据实际应用选择MMR或者LMR原则,输入基本尺寸、形位公差尺寸和实际测量尺寸,即可计算出对应的公差值。以孔的MMR为例见如图2、3,当测量出的直径为φ8.16时,则对应的垂直度公差为0.02。
图2 MMR孔的标注
图3 MMR孔尺寸对应公差值
开发本软件的原因主要有以下几点:
- 提高设计效率:通过这款软件,工程师可以快速计算实测尺寸对应公差,减少繁琐的手动计算,提高设计效率。
- 增强设计准确性:该软件基于严谨的数学模型和算法进行计算,避免了手动计算可能出现的错误,提高了设计的准确性。
- 方便易用:该软件具备友好的用户界面,使得用户可以便捷地进行操作,输入参数即可得到结果,省去了繁琐的手动计算过程。
二、技术细节
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的自定义对话框。以下是代码的完整架构流程和具体的技术细节:
- 初始化(init):在
national_standard_Dialog
类的__init__
方法中,首先通过调用父类的__init__
方法来初始化对话框的基本属性。然后,设置对话框的标题和图标。图标使用QIcon
类加载本地的.ico
文件,并将其设置为对话框的窗口图标。之后,设置了对话框的初始位置和大小,以及固定大小。 - 布局设置:使用
QVBoxLayout
作为对话框的布局,这表示所有添加到对话框中的控件都会按照垂直方向(从上到下)进行排列。然后,创建了一个QScrollArea
,并设置其水平和垂直滚动条政策为根据需要进行滚动。 - Graphics View:创建了一个
QGraphicsView
,并将其设置为QScrollArea
的widget。QGraphicsView
是用于显示QGraphicsScene
(这里是self.scene
)的视图。在此处,设置了视图的更新模式为FullViewportUpdate
,这意味着当QGraphicsScene
的内容发生变化时,QGraphicsView
会立即更新其显示。 - 创建并设置Graphics Scene:创建了一个
QGraphicsScene
,并将其设置为QGraphicsView
的场景。然后,加载并缩放了一张图片(从.png
文件),并将其添加到场景中。图片可以通过拖动和交互进行移动,但通过设置QGraphicsView
的交互模式为False
,禁止了所有的用户交互,包括拖动。 - 滚动条设置:再次设置了滚动条的政策为根据需要进行滚动。这是因为之前在设置
QScrollArea
时已经设置过了,这里是为了重新设置一下。 - 移动窗口至屏幕中央:获取屏幕的大小和位置,并将对话框移动到屏幕的中央。这是通过计算对话框的中心点位置并与屏幕的中心点位置相匹配来实现的。
总的来说,这个对话框的主要功能是显示一个带有可拖动图片的视图,图片和视图都可以根据需要进行滚动。同时,窗口会默认移动到屏幕中央。
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的自定义对话框。以下是代码的完整架构流程和具体的技术细节:
- 初始化(init):在
version_Dialog
类的__init__
方法中,首先通过调用父类的__init__
方法来初始化对话框的基本属性。然后,设置对话框的标题和图标。图标使用QIcon
类加载本地的.ico
文件,并将其设置为对话框的窗口图标。之后,设置了对话框的初始位置和大小,以及固定大小。 - 设置对话框大小和布局:使用
QGridLayout
作为对话框的布局,这表示所有添加到对话框中的控件都会按照网格形式进行排列。然后,创建了一个QTextEdit
,并将其设置为只读,禁止编辑。 - 设置文本编辑框样式:为
QTextEdit
设置字体、大小和样式表,使其内容以"Times New Roman"字体显示,字体大小为12pt。 - 添加控件到布局:将
QTextEdit
添加到布局中。 - 设置对话框标题:使用
QCoreApplication.translate
方法设置对话框的标题。 - 设置对话框大小和位置:设置了对话框的最小、最大和固定大小。然后,获取屏幕的大小和位置,并将对话框移动到屏幕的中央。
- 设置文本编辑框内容:在文本编辑框中设置HTML内容。注意,这里没有提供HTML内容的具体实现,所以在文本编辑框中设置HTML内容的方法为空。
总的来说,这个对话框的主要功能是显示一个带有文本编辑框的视图,文本编辑框的内容为版本信息,且不可编辑。同时,窗口会默认移动到屏幕中央。
三、完整代码
软件及完整代码请戳这里:MMC&LMC公差计算软件及代码