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

pyqt使用QChartView绘制饼状图详解(QPieSeries)

pyqt使用QChartView绘制柱状图一、工程搭建二、QPieSeries详解1、核心概念2、主要功能和方法2.1、QPieSeries 的常用方法2.2、QPieSlice 的常用属性和方法3、关键点解释4、常见问题二、代码示例1、示例代码2、效果展示一、工程搭建pyqt6QtCharts模块需要单独安装只安装pyqt6是不包含图表功能的。二、QPieSeries详解QPieSeries是 PyQt6 的QtCharts模块中的一个类专门用于创建和显示饼图。饼图是一种常见的图表类型用于展示数据各部分占整体的比例关系通常以圆形切片的形式呈现。1、核心概念系列 (QPieSeries):它是饼图数据的主要载体。你可以向这个系列中添加多个QPieSlice对象。它管理这些切片、计算它们的角度基于数值大小和总和、处理切片的状态如是否被突出显示以及图例等信息。切片 (QPieSlice):代表饼图中的一块扇形区域。每个切片包含value: 该切片代表的数值。label: 显示在切片上或其附近的文本标签如类别名称。exploded: 布尔值表示该切片是否被“炸开”即从饼图中心稍微移开以突出显示。样式属性如颜色 (color)、标签字体 (labelFont)、标签可见性 (labelVisible)、标签位置 (labelPosition)、标签格式 (labelArmLengthFactor、labelBorderColor等。切片可以响应点击等信号。图表 (QChart):是容纳各种图表系列如QPieSeries,QLineSeries,QBarSeries的容器。负责图表的整体布局、标题、图例位置、动画效果等。图表视图 (QChartView):是一个QWidget用于在 GUI 窗口中显示QChart对象。它处理用户交互如缩放、平移虽然饼图通常不需要平移。2、主要功能和方法2.1、QPieSeries的常用方法append(label, value): 添加一个切片。label是字符串标签value是数值。返回新创建的QPieSlice对象。append(slice): 直接添加一个已创建的QPieSlice对象。insert(index, slice): 在指定索引位置插入一个切片。remove(slice): 移除指定的切片。take(slice): 移除切片但不删除它返回该切片。clear(): 移除所有切片。slices(): 返回包含所有切片的列表。count(): 返回切片数量。sum(): 返回所有切片数值的总和。setHoleSize(holeSize): 设置饼图中心的孔洞大小0.0 表示实心饼图1.0 表示整个饼图消失。值在 [0.0, 1.0] 范围内。setPieSize(pieSize): 设置饼图相对于图表绘图区域的大小1.0 表示尽可能大。值在 [0.0, 1.0] 范围内。setPieStartAngle(startAngle): 设置第一个切片的起始角度度数默认为 0°即 3 点钟方向。setPieEndAngle(endAngle): 设置最后一个切片的结束角度度数。与startAngle结合可创建半圆或扇形图。setLabelsVisible(visibleTrue): 控制所有切片的标签是否可见。setLabelsPosition(position): 设置所有切片的标签位置QPieSlice.LabelPosition枚举值。pressed.connect(slot): 连接信号当用户按下饼图中的某个切片时触发。槽函数会接收到被按下的QPieSlice对象。released.connect(slot): 连接信号当用户释放按下的切片时触发。clicked.connect(slot): 连接信号当用户点击切片时触发。doubleClicked.connect(slot): 连接信号当用户双击切片时触发。hovered.connect(slot): 连接信号当鼠标悬停在切片上时触发。槽函数接收切片对象和一个布尔值表示是进入True还是离开False悬停状态。added(slices): 信号当切片被添加到系列时触发。removed(slices): 信号当切片从系列中移除时触发。2.2、QPieSlice的常用属性和方法value()/setValue(value): 获取/设置切片代表的数值。改变数值会自动重新计算饼图。label()/setLabel(label): 获取/设置切片的文本标签。isLabelVisible()/setLabelVisible(visibleTrue): 获取/设置该切片的标签是否可见会覆盖系列的全局设置。labelPosition()/setLabelPosition(position): 获取/设置该切片的标签位置QPieSlice.LabelPosition枚举值。QPieSlice.LabelOutside: 标签在饼图外默认。QPieSlice.LabelInside: 标签在饼图内。QPieSlice.LabelInsideHorizontal: 标签在饼图内水平方向。QPieSlice.LabelInsideTangential: 标签在饼图内切线方向。QPieSlice.LabelInsideNormal: 标签在饼图内法线方向。labelFont()/setLabelFont(font): 获取/设置标签的字体 (QFont)。labelBrush()/setLabelBrush(brush): 获取/设置标签的画笔 (QBrush用于文本填充)。labelColor()/setLabelColor(color): 获取/设置标签的颜色设置labelBrush更灵活。borderColor()/setBorderColor(color): 获取/设置切片边框的颜色。borderWidth()/setBorderWidth(width): 获取/设置切片边框的宽度。color()/setColor(color): 获取/设置切片的填充颜色。isExploded()/setExploded(explodedTrue): 获取/设置该切片是否被“炸开”。explodedDistanceFactor()/setExplodedDistanceFactor(factor): 获取/设置“炸开”距离的因子相对于饼图半径。percentage(): 计算并返回该切片数值占总和的比例小数形式如 0.25 表示 25%。startAngle(): 返回该切片的起始角度度数。angleSpan(): 返回该切片占据的角度范围度数。pressed.connect(slot),released.connect(slot),clicked.connect(slot),doubleClicked.connect(slot): 与QPieSeries的同名信号类似但只针对这个特定切片触发。3、关键点解释导入模块: 确保导入了QChart,QChartView,QPieSeries,QPieSlice以及必要的 GUI 和核心模块。创建QPieSeries: 这是存储饼图数据的核心对象。添加切片: 使用append(label, value)方法添加数据点。它会创建并返回一个QPieSlice对象方便后续自定义。自定义切片: 通过返回的QPieSlice对象可以设置颜色、标签位置、是否炸开、边框样式等。创建QChart: 图表容器。将系列添加到图表中并设置标题、动画等全局属性。创建QChartView: 用于在窗口中显示图表的部件。设置setRenderHint(QPainter.Antialiasing)可以使图形边缘更平滑。信号连接:QPieSlice可以响应点击 (clicked)、悬停 (hovered)、按下 (pressed)、释放 (released) 等信号实现交互功能。QPieSeries也有类似的信号但作用于整个系列内的任意切片。布局: 将QChartView设置为主窗口的中心部件或其他布局管理器的子部件。4、常见问题饼图不显示检查是否将QPieSeries添加到了QChart中 (chart.addSeries(series))。检查是否将QChart设置给了QChartView(QChartView的构造函数或setChart方法)。检查QChartView是否被添加到了窗口的布局中或设置为中央部件。切片标签不显示检查QPieSeries.setLabelsVisible(True)或QPieSlice.setLabelVisible(True)。检查标签位置 (setLabelPosition) 是否合适有时标签可能因位置或大小问题被遮挡。检查标签字体颜色是否与背景色对比度足够。二、代码示例1、示例代码importmathimportrandomimportsysfromPyQt6.QtCoreimportQt,QTimer,QPointFfromPyQt6.QtGuiimportQPainter,QPen,QColor,QFontfromPyQt6.QtWidgetsimportQApplication,QMainWindow,QPushButton,QLabel,QSpinBox,QWidget,QHBoxLayout,QVBoxLayout,\ QMessageBoxfromPyQt6.QtChartsimportQChart,QChartView,QLineSeries,QValueAxis,QSplineSeries,QBarSet,QBarSeries,\ QCategoryAxis,QPieSlice,QPieSeriesclassChartWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(PyQt6 饼状图完美运行示例)self.resize(900,700)self.setStyleSheet(background-color: #f8f9fa;)# 1. 初始化基础数据 # 初始分类与占比6个分类总和100self.categories[产品A,产品B,产品C,产品D,产品E,产品F]self.init_values[25,18,22,15,10,10]# 颜色配置工业风配色区分度高self.colors[QColor(255,99,71),# 番茄红QColor(60,179,113),# 海草绿QColor(30,144,255),# 道奇蓝QColor(255,165,0),# 橙色QColor(128,0,128),# 紫色QColor(240,128,128)# 浅珊瑚色]# 2. 创建饼图系列核心 self.pie_seriesQPieSeries()self.pie_series.setHoleSize(0.2)# 中间空心大小0-10为实心self.init_pie_data()# 初始化饼图数据# 3. 创建图表容器 self.chartQChart()self.chart.addSeries(self.pie_series)self.chart.setTitle(产品销量占比分析)self.chart.setTitleFont(QFont(微软雅黑,16,QFont.Weight.Bold))self.chart.setAnimationOptions(QChart.AnimationOption.SeriesAnimations)# 加载动画self.chart.legend().setVisible(True)self.chart.legend().setAlignment(Qt.AlignmentFlag.AlignRight)# 图例位置self.chart.legend().setFont(QFont(微软雅黑,10))# 4. 创建ChartView显示图表 self.chart_viewQChartView(self.chart)self.chart_view.setRenderHint(QPainter.RenderHint.Antialiasing)# 抗锯齿self.chart_view.setInteractive(True)# 启用鼠标交互旋转/缩放# 5. 控制控件 # 按钮self.refresh_btnQPushButton(随机更新数据)self.reset_btnQPushButton(恢复初始数据)self.animate_btnQPushButton(切换动画效果)self.hole_btnQPushButton(切换空心/实心)# 占比最大值设置self.max_labelQLabel(单类最大占比)self.max_spinQSpinBox()self.max_spin.setRange(30,80)self.max_spin.setValue(50)self.max_spin.setSuffix(%)# 按钮样式美化适配不同状态btn_style QPushButton { padding: 10px 20px; font-size: 12px; border-radius: 6px; background-color: #2196F3; color: white; border: none; margin: 5px; } QPushButton:disabled { background-color: #cccccc; } QPushButton:hover:enabled { background-color: #1976D2; } self.refresh_btn.setStyleSheet(btn_style.replace(#2196F3,#4CAF50).replace(#1976D2,#45a049))self.reset_btn.setStyleSheet(btn_style)self.animate_btn.setStyleSheet(btn_style.replace(#2196F3,#FF9800).replace(#1976D2,#F57C00))self.hole_btn.setStyleSheet(btn_style.replace(#2196F3,#F44336).replace(#1976D2,#D32F2F))# 绑定事件self.refresh_btn.clicked.connect(self.refresh_random_data)self.reset_btn.clicked.connect(self.reset_original_data)self.animate_btn.clicked.connect(self.toggle_animation)self.hole_btn.clicked.connect(self.toggle_hole)# 6. 布局 central_widgetQWidget()self.setCentralWidget(central_widget)# 顶部控制栏control_layoutQHBoxLayout()control_layout.addWidget(self.refresh_btn)control_layout.addWidget(self.reset_btn)control_layout.addWidget(self.animate_btn)control_layout.addWidget(self.hole_btn)control_layout.addWidget(self.max_label)control_layout.addWidget(self.max_spin)control_layout.addStretch()# 自动填充空白# 主布局main_layoutQVBoxLayout(central_widget)main_layout.addLayout(control_layout)main_layout.addWidget(self.chart_view,stretch1)# 占满剩余空间# 7. 初始状态配置 self.is_holeTrue# 标记是否空心self.animation_enabledTruedefinit_pie_data(self):初始化饼图数据安全方式# 清空系列避免重复添加self.pie_series.clear()# 逐个添加饼图切片foridx,(category,value)inenumerate(zip(self.categories,self.init_values)):slice_itemQPieSlice(category,value)# 设置切片样式slice_item.setColor(self.colors[idx])slice_item.setLabelVisible(True)# 显示标签slice_item.setLabelFont(QFont(微软雅黑,9))# 鼠标悬停提示# slice_item.setToolTip(f{category}{value}%)# 点击切片高亮slice_item.clicked.connect(lambdasslice_item:self.highlight_slice(s))self.pie_series.append(slice_item)defrefresh_random_data(self):随机更新饼图数据无崩溃self.refresh_btn.setEnabled(False)# 生成随机占比保证总和100max_valueself.max_spin.value()values[]remaining100# 前5个分类随机分配foriinrange(5):ifi4:valremainingelse:valrandom.randint(5,min(max_value,remaining-(5-i)*5))values.append(val)remaining-val# 第6个分类填充剩余值values.append(remaining)# 安全更新数据清空系列后重新添加self.pie_series.clear()foridx,(category,value)inenumerate(zip(self.categories,values)):slice_itemQPieSlice(category,value)slice_item.setColor(self.colors[idx])slice_item.setLabelVisible(True)slice_item.setLabelFont(QFont(微软雅黑,9))slice_item.clicked.connect(lambdasslice_item:self.highlight_slice(s))self.pie_series.append(slice_item)self.refresh_btn.setEnabled(True)defreset_original_data(self):恢复初始数据self.refresh_btn.setEnabled(False)self.init_pie_data()self.refresh_btn.setEnabled(True)deftoggle_animation(self):切换动画效果ifself.animation_enabled:self.chart.setAnimationOptions(QChart.AnimationOption.NoAnimation)self.animate_btn.setText(开启动画效果)else:self.chart.setAnimationOptions(QChart.AnimationOption.SeriesAnimations)self.animate_btn.setText(关闭动画效果)self.animation_enablednotself.animation_enableddeftoggle_hole(self):切换空心/实心ifself.is_hole:self.pie_series.setHoleSize(0.0)# 实心self.hole_btn.setText(切换为空心)else:self.pie_series.setHoleSize(0.2)# 空心self.hole_btn.setText(切换为实心)self.is_holenotself.is_holedefhighlight_slice(self,slice_item):点击切片高亮弹出提示放大切片# 重置所有切片大小forsinself.pie_series.slices():s.setExploded(False)s.setLabelFont(QFont(微软雅黑,9))# 高亮当前切片slice_item.setExploded(True)# 向外突出slice_item.setLabelFont(QFont(微软雅黑,10,QFont.Weight.Bold))# 弹出提示框QMessageBox.information(self,切片详情,f{slice_item.label()}{slice_item.value()}%)if__name____main__:appQApplication(sys.argv)windowChartWindow()window.show()sys.exit(app.exec())2、效果展示

相关文章:

pyqt使用QChartView绘制饼状图详解(QPieSeries)

pyqt使用QChartView绘制柱状图一、工程搭建二、QPieSeries详解1、核心概念2、主要功能和方法2.1、QPieSeries 的常用方法2.2、QPieSlice 的常用属性和方法3、关键点解释4、常见问题二、代码示例1、示例代码2、效果展示一、工程搭建 pyqt6QtCharts模块需要单独安装,…...

3分钟搞定!Windows 11 LTSC 24H2微软商店终极安装指南

3分钟搞定!Windows 11 LTSC 24H2微软商店终极安装指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 你是否正在使用Windows 11 24H2 LTS…...

6_Harness驾驭工程可靠性层:混沌工程与服务可靠性管理

6_Harness驾驭工程可靠性层:混沌工程与服务可靠性管理 关键字: Chaos Engineering、混沌工程、SRM、服务可靠性管理、SLI、SLO、错误预算、韧性评分、故障模拟、事件响应、事后分析、韧性验证、自动故障注入、最小爆炸半径、Datadog、New Relic、Prometh…...

Image-to-Video镜像使用技巧:提示词怎么写?参数怎么调?

Image-to-Video镜像使用技巧:提示词怎么写?参数怎么调? 1. 快速上手Image-to-Video镜像 Image-to-Video图像转视频生成器是一款基于I2VGen-XL模型的实用工具,能够将静态图片转化为动态视频。这个由科哥二次开发的镜像已经预装了…...

跨域突围与全栈架构演进:从Vite本地代理到Nginx部署+Next.js BFF层实战

摘要:前面10篇博客,我们从SPA架构、React核心Hook、TS类型系统、组件化封装、性能优化,一步步吃透了中后台系统的前端开发全流程,完成了从前端入门到熟练开发的进阶。但想要从“只会写页面的码农”,升级为“懂架构、懂…...

手把手教你学Simulink——基于Simulink的同步整流Buck变换器效率提升仿真

目录 手把手教你学Simulink——基于Simulink的同步整流Buck变换器效率提升仿真​ 摘要​ 一、背景与挑战​ 1.1 传统二极管整流的效率瓶颈​ 1.1.1 二极管损耗机理​ 1.2 同步整流的优势与挑战​ 1.2.1 同步整流原理​ 1.2.2 核心挑战​ 1.3 设计目标​ 二、系统架构与…...

手把手教你windows下如何部署copaw

前言: 本文内容主要讲解通过手工部署python并使用pip安装部署copaw,在官网有一键部署脚本等等教程,都很方便,但为什么作者要通过手工部署python环境,原因很简单,解决环境冲突的问题,通过conda能…...

CLIP-GmP-ViT-L-14图文匹配工具实战:新闻配图与标题语义一致性自动检测

CLIP-GmP-ViT-L-14图文匹配工具实战:新闻配图与标题语义一致性自动检测 你有没有遇到过这种情况?看到一篇新闻,标题写得挺吸引人,但配图却让人摸不着头脑——标题说“科技创新”,配图却是风景照;标题讲“经…...

轻量级工具G-Helper:一站式解决ROG游戏本色彩配置异常问题

轻量级工具G-Helper:一站式解决ROG游戏本色彩配置异常问题 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目…...

NaViL-9B一文详解:双GPU显存占用分析、服务重启与端口验证

NaViL-9B一文详解:双GPU显存占用分析、服务重启与端口验证 1. 平台概述 NaViL-9B是由专业研究机构开发的原生多模态大语言模型,具备文本问答和图片理解双重能力。该模型在设计上充分考虑了工程落地需求,特别针对双GPU环境进行了优化适配。 …...

OpenClaw人人养虾:接入iMessage

此方案为旧版 iMessage 接入方式,仅适用于 macOS 且配置复杂。新用户请优先使用 BlueBubbles 方案,它更稳定且功能更丰富。 前置要求 macOS 12 Monterey 或更高版本(仅支持 macOS)已登录 Apple ID 并激活 iMessageHomebrew 包管…...

Phi-3-Mini-128K企业级应用:基于MCP协议构建安全可控的AI工具链

Phi-3-Mini-128K企业级应用:基于MCP协议构建安全可控的AI工具链 最近和几个在企业里做技术管理的朋友聊天,大家不约而同地提到了同一个烦恼:看着外面各种AI模型能力越来越强,心里痒痒的,真想引入到自己的业务流程里&a…...

统信系统下如何管理Mysql?

背景 看到标题很多朋友会打趣的问我:“你不是一直用麒麟操作系统做讲解吗?”,其实DBCS和DESK的兼容性太强了,什么操作系统都行,Windows上最容易了,所以我一般不用Windows,下次我用Ubuntu给大家…...

AdaptixC2实战(一)Hack Smart Security

前言: 本篇是AdaptixC2实战系列的第一篇,环境是 THM 上的 Hack Smart Security 靶机。我们将学习和使用AdaptixC2进行操作,基于AdaptixC2工具所提供的能力,探讨AdaptixC2的使用技巧及操作安全。 背景(纯虚构): 你的任务是渗透臭名昭著的 Hack Smarter APT 组织的服务器…...

2.4 微积分与自动微分1

微积分 导数与微分 操作之前记得检查版本确保 matplotlib 正确安装:在d2l环境下输入pip install matplotlib (windows版) 重启jupyter就可以运行了(如果还是不行自行移步ai) 1.我们通过简单的微分方式得到我们需要的极限 2.之后我们再试着…...

TTL串口设计及其注意事项

一、TTL串口设计概述我们常见的处理器(单片机)引出来的串口是UART、USART,其中有没有S取决于有没有时钟信号(SLK),出来的电平是TTL电平,常见的UART串口设计有3线串口设计,单线串口设计&#xff…...

FLUX.1-dev LoRA微调指南:基于像素幻梦输出数据集训练专属风格

FLUX.1-dev LoRA微调指南:基于像素幻梦输出数据集训练专属风格 1. 前言:为什么需要LoRA微调 在像素艺术创作领域,每个艺术家都渴望拥有独特的视觉风格。FLUX.1-dev作为当前最先进的扩散模型,配合像素幻梦(Pixel Dream Workshop)…...

EasyAnimateV5-7b-zh-InP在计算机网络教学视频生成中的应用

EasyAnimateV5-7b-zh-InP在计算机网络教学视频生成中的应用 1. 引言 计算机网络课程的教学一直面临着一个难题:如何将抽象的网络协议、拓扑结构和数据传输过程直观地展示给学生。传统的静态图片和文字描述往往难以让学生真正理解数据包是如何在网络中流动的&#…...

Node RED实战:5分钟搞定MQTT消息发布与订阅(附EMQX配置)

Node RED与MQTT实战:从零构建物联网消息系统 1. 为什么选择Node RED与MQTT组合? 物联网开发领域一直存在一个核心挑战:如何快速搭建可靠的消息通信系统而不陷入底层协议实现的泥潭。这正是Node RED与MQTT这对黄金组合的价值所在——它们让开发…...

手把手教你用J-Link Commander设置仿真器序列号(2023最新版)

2023年J-Link仿真器序列号配置全指南:从入门到精通 第一次拿到J-Link仿真器时,很多开发者都会遇到一个看似简单却容易踩坑的问题——如何正确设置设备序列号。作为嵌入式开发中不可或缺的调试工具,J-Link仿真器的序列号不仅是设备身份标识&am…...

手把手教你用modf()和fmod()解决C语言浮点数计算中的常见坑

深入解析C语言浮点数计算:modf()与fmod()的实战应用 浮点数计算在C语言开发中无处不在,从游戏物理引擎到嵌入式传感器数据处理,精确的浮点运算直接关系到程序行为的正确性。然而,许多开发者第一次遭遇浮点数计算误差时&#xff0c…...

从零开始学习C++ -- 基础知识

C入门基础1.C的第一个程序2.命名空间2.1 namespace的价值2.2 namespace的定义2.3命名空间使用3.C输入&输出4.缺省参数5.函数重载6.引用6.1引用的概念和定义6.2引用的特性6.3引用的使用6.4const引用6.5指针和引用的关系7.inline8.nullptr1.C的第一个程序 #include <iost…...

联想M920x黑苹果配置指南:从硬件适配到性能优化的完整方案

联想M920x黑苹果配置指南&#xff1a;从硬件适配到性能优化的完整方案 【免费下载链接】M920x-Hackintosh-EFI Hackintosh Opencore EFIs for M920x 项目地址: https://gitcode.com/gh_mirrors/m9/M920x-Hackintosh-EFI 联想M920x作为一款紧凑型商用主机&#xff0c;通过…...

Connect to Oracle Database with JDBC Driver

1. Overview The Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver. 2. The Database To get us started, we need a database. If we don’t have access to …...

Flutter 实现点击任意位置收起键盘的最佳实践

痛点 在 Flutter 开发中&#xff0c;TextField 聚焦后会弹出键盘&#xff0c;关闭键盘通常需要&#xff1a; 点击系统返回键点击输入框外的空白区域&#xff08;但很多情况下点击空白区域也没反应&#xff09;点击其他输入框&#xff08;键盘会切换到另一个输入框&#xff0c;不…...

Ling-1T万亿参数模型:高效推理新体验

Ling-1T万亿参数模型&#xff1a;高效推理新体验 【免费下载链接】Ling-1T-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ling-1T-FP8 导语&#xff1a;近日&#xff0c;inclusionAI团队正式发布了Ling系列2.0版本的旗舰模型——Ling-1T-FP8&#xff…...

Windows 下 Docker Desktop 安装教程及常用命令(2026 最新)

Windows 安装 Docker 核心是 Docker Desktop WSL2&#xff08;推荐&#xff09;&#xff0c;家庭版 / 专业版通用&#xff0c;性能好、最稳定&#xff0c;下面是详细步骤。 一、系统与硬件要求 1. 1、系统版本 Windows 10 64 位&#xff1a;家庭 / 专业 / 企业 22H2&#x…...

Iceoryx(冰羚):无锁队列与并发控制的设计与实现3(源码解析)

接上篇设计4: 索引管理层&#xff08; MpmcIndexQueue / CyclicIndex&#xff09;Subscriber存储数据使用的是queue&#xff0c;是为了保证数据的读取顺序。MpmcLockFreeQueue 为了满足多个进程同时写的情况&#xff0c;采用了索引数据分离的方案&#xff08;底层的索引实现为 …...

2026 ASNT-TC-1A 无损检测 Ⅱ/Ⅲ 级认证指南|API/ASME 认证必备 + 报考实操

一、行业刚需&#xff1a;为何 ASNT-TC-1A 资质是工业检测领域的「硬通货」在石油天然气、压力容器、钢结构焊接等工业领域&#xff0c;无损检测&#xff08;NDT&#xff09;是产品质量保障的核心环节&#xff0c;而ASNT-TC-1A作为美国无损检测学会制定的人员资格鉴定和认证标准…...

基于 eBPF 与 Python 异步代理的嵌入式 OT 网络微隔离架构实战

前言与业务背景最近在主导一个船舶 OT 网络的底层加固项目&#xff0c;遇到了一个典型的边缘计算资源受限问题。根据最新的网络安全规范&#xff08;如 IACS UR E27&#xff09;&#xff0c;边缘节点必须具备跨区域流量的深度过滤以及审计日志的防篡改留存能力。如果照搬传统的…...