压测工具开发实战篇(四)——client子窗口功能
|
文章目录
- 树控件
- 添加文件
- 补充学习: 函数定义中循环体里的局部变量
- 补充学习: 动态添加对象属性
- 刷新文件
- 上下文菜单 (右键菜单)
- 实现右键菜单功能
- 编辑节点文本

在学习本篇文章之前, 建议先看一下上篇介绍MDI子窗口的文章:
压测工具开发实战篇(三)——开发MDI子窗口功能
树控件
接下来, 我们想在client子窗口功能中添加 展现所选目录的代码文件的功能, 可以采用QTreeWidget树控件, 所展现的样式类似于下图:
说明: 我们这里暂时只实现展示的内容都是文件的功能, 以子目录的形式以后实现.
首先我们在 client.ui 子窗口中加入 QTreeWidget 树控件, 并且将对象名设置为 tree_file, 像这样:
OK, 有了树控件之后, 该怎么将获取到的文件显示到树控件上呢?
其实很简单, 只需要像这样改写代码即可:
# client.pyclass Client:def __init__(self):self.ui = uiLoader.load('./ui/client.ui')self.nodeIcon = qta.icon('fa5.user', color='steelBlue')# 在树控件上显示文件self.list_file_on_tree()def list_file_on_tree(self):# 清除树上所有文件self.ui.tree_file.clear()# 这里获取的文件是完整的文件路径名pyfiles = glob.glob(os.path.join(SI.projectPath, 'client/*.py'))# 隐藏标头栏self.ui.tree_file.setHeaderHidden(True)# 获取树控件的不可见根结点root = self.ui.tree_file.invisibleRootItem()for pyf in pyfiles:# 获取完整文件路径名的基本文件名fname = os.path.basename(pyf)# 准备一个树节点nodeItem = QTreeWidgetItem()# 设置节点图标nodeItem.setIcon(0, self.nodeIcon)# 设置该节点的第一个列文本nodeItem.setText(0, fname)# 设置该节点在以前的flag基础上, 多一个可编辑ItemIsEditablenodeItem.setFlags(nodeItem.flags() | Qt.ItemIsEditable)root.addChild(nodeItem)
这样之后我们看:
符合预期, 这里需要再补充一个功能就是: 在还没有设置项目目录的时候, 应该在日志输出文本框中显示提示信息, 并且不能打开子窗口, 只有在设置了项目目录之后才能在点击侧边按钮的时候正确打开子窗口显示对应的数据.
如果要实现上面的功能, 只需要在 main.py 文件中的 打开子窗口方法之前判断是否已经设置了当前的项目目录.
# main.pydef load_client_sub_win(self):# 打开子窗口之前需要先判断是否已经设置了当前的项目目录if not SI.projectPath:self.logInfo('请先设置项目目录')return...
这样实现之后, 我们看:
OK, 符合预期, 继续看接下来的内容.
添加文件
接下来我们在 client.ui 中定义工具栏, 实现 添加客户端代码和刷新客户端代码的功能:
比如我们点击添加的动作:
会自动帮我们显示输入对话框, 并且给出默认的文件名(并且保证文件名没有重复):
# 设置工具栏条目图标
self.ui.action_addone.setIcon(qta.icon('fa5.file'))
self.ui.action_refresh.setIcon(qta.icon('mdi.refresh'))
# 定义点击工具栏action事件处理
self.ui.action_addone.triggered.connect(self.action_addone)
self.ui.action_refresh.triggered.connect(self.list_file_on_tree)
当点击添加动作时, 会执行 action_addone 信号处理函数:
def action_addone(self):# 获得合适的初始名字for i in range(1, 1000):filename = f'client_{i}.py'if not os.path.exists(os.path.join(self.thisFolderPath, filename)):breakwhile True:# 输入对话框 - 返回值分别是输入数据 和 是否点击了 OK按钮filename, okPressed = QInputDialog.getText(self.ui, "请输入文件名字", "文件名: ",QLineEdit.Normal, filename)filename = filename.strip()if not okPressed:returnfilepath = os.path.join(self.thisFolderPath, filename)if os.path.exists(filepath):QMessageBox.warning(self.ui, "错误", f"文件{filepath}已经存在, 请重新输入!!!")else:break# 直接创建一个新文件open(filepath, 'w', encoding='utf-8')parentItem = self.ui.tree_file.invisibleRootItem()# 准备一个树节点nodeItem = QTreeWidgetItem()# 保存原始文件名 - 添加树节点对象的动态属性nodeItem._original_filename = filenamenodeItem.setIcon(0, self.nodeIcon)nodeItem.setText(0, filename)nodeItem.setFlags(nodeItem.flags() | Qt.ItemIsEditable)# 添加到树的不可见根结点下面, 成为第一层节点parentItem.addChild(nodeItem)
补充学习: 函数定义中循环体里的局部变量
问题是: 上面的代码中 for循环里 filename 的作用域, 它为什么可以作为 .getText(self.ui, "请输入文件名字", "文件名: ",QLineEdit.Normal, filename)
中的参数filename
, 不是出了for循环的作用域了吗?
在 for 循环中,filename 是在循环体内部被赋值的, 根据 Python 的作用域规则,如果一个变量在某个代码块(如循环体、if 块等)中被赋值,那么它会被提升到整个函数的作用域中,而不仅仅局限于该代码块.
随意对于整个函数来说:
虽然 filename 是在 for 循环中被首次赋值,但由于它是在函数 action_addone 的作用域内被赋值的,因此它是一个局部变量,可以在整个函数内部被访问.
补充学习: 动态添加对象属性
在上面的代码中, 我们在 创建树节点的时候, 紧接着就为这个新建的树节点添加属性_original_filename, 保留原始文件名, 为了方便后面修改文件名.
我们知道, 本身 QTreeWidgetItem 类没有定义 _original_filename 属性, 我们可以像上面那样直接赋值为其实例添加新的属性, 但是要注意的是最好在新建节点的时候就加上, 防止后面忘记.
所以代码就这样:
# 准备一个树节点
nodeItem = QTreeWidgetItem()
# 保存原始文件名 - 添加树节点对象的动态属性
nodeItem._original_filename = filename
这样做的好处是:
当用户点击某个节点时,你可以通过 item._original_filename 获取到该节点对应的原始文件名.
- 在处理文件操作(如打开文件、删除文件等)时,可以直接使用 _original_filename 属性来获取文件名,而不需要再从其他地方查找.
刷新文件
定义刷新信号处理方法就很简单了, 直接列出树控件上的所有文件节点即可.
def list_file_on_tree(self):# 清除树上所有文件self.ui.tree_file.clear()# 这里获取的文件是完整的文件路径名pyfiles = glob.glob(os.path.join(SI.projectPath, 'client/*.py'))# 隐藏标头栏self.ui.tree_file.setHeaderHidden(True)# 获取树控件的不可见根结点root = self.ui.tree_file.invisibleRootItem()for pyf in pyfiles:# 获取完整文件路径名的基本文件名fname = os.path.basename(pyf)# 树控件需要通过节点来组织和显示数据,而不是直接显示文件路径# 准备一个树节点nodeItem = QTreeWidgetItem()# 保存原始文件名 - 添加树节点对象的动态属性nodeItem._original_filename = fname# 设置节点图标nodeItem.setIcon(0, self.nodeIcon)# 设置该节点的第一个列文本nodeItem.setText(0, fname)# 设置该节点在以前的flag基础上, 多一个可编辑ItemIsEditablenodeItem.setFlags(nodeItem.flags() | Qt.ItemIsEditable)root.addChild(nodeItem)
上下文菜单 (右键菜单)
现在我们还需要实现右键树节点时的删除操作:
这就要补充学习上下文菜单
的知识了:
“上下文菜单”指的是在某个特定的上下文(如树节点)中,通过鼠标右键点击而弹出的菜单.
这种菜单通常包含与当前上下文相关的操作选项,例如在树形控件中,右键点击某个节点可能会弹出一个菜单,提供对该节点进行操作的选项,如“添加子节点”、“删除节点”、“重命名节点”等.
实现右键菜单功能
1.设置上下文菜单策略:
通过调用setContextMenuPolicy(Qt.CustomContextMenu)
方法,将树形控件的上下文菜单策略设置为自定义模式
.
这意味着菜单的显示和内容将由用户自己定义,而不是使用默认的系统菜单.
2.连接信号与槽:
通过customContextMenuRequested.connect
(self.show_context_menu_onfiletree),将树形控件的customContextMenuRequested信号连接到一个自定义的槽函数show_context_menu_onfiletree.
当用户右键点击树形控件时,会触发这个信号,进而调用槽函数来显示自定义的上下文菜单.
# 设置树控件上下文策略 - 也可以在 Qt Designer 中设置
self.ui.tree_file.setContextMenuPolicy(Qt.CustomContextMenu)
# 定义信号处理方法
self.ui.tree_file.customContextMenuRequested.connect(self.show_context_menu_on_filetree)
我们来实现这个右键树控件时触发信号调用的槽函数:
def show_context_menu_on_filetree(self, position):"""右键树控件菜单"""tree = self.ui.tree_file# 获取当前用户点选的节点curItem = tree.currentItem()# 没有当前选中节点if not curItem:print('没有选中节点,返回')return# 创建 上下文菜单 和 菜单项Actionmenu = QMenu(tree)action_delnode = QAction("删除")action_delnode.triggered.connect(self.action_delnode)menu.addAction(action_delnode)# 在鼠标点击处展示上下文菜单menu.exec_(tree.mapToGlobal(position))
我们发现触发上面的删除动作会执行 action_delnode 方法:
# 右键菜单的删除节点方法 - 注意别忘了删除电脑中的文件
def action_delnode(self, position):tree = self.ui.tree_file# 获取当前用户点选的节点currentItem = tree.currentItem()# 真正的在电脑中把文件删掉filepath = os.path.join(self.thisFolderPath, currentItem.text(0))try:os.remove(filepath)except:pass# 在Qt界面上把文件删掉# 找到该节点的父节点parentItem = currentItem.parent()# 如果没有父节点, 就是不可见的父节点if not parentItem:parentItem = tree.invisibleRootItem()# 删除该节点parentItem.removeChild(currentItem)
编辑节点文本
如果我们要实现 双击树节点 可以编辑节点文本, 首先需要在创建节点的时候, 设置节点的flag为: 可编辑 ItemIsEditable
# 准备一个树节点
nodeItem = QTreeWidgetItem()
# 保存原始文件名 - 添加树节点对象的动态属性
nodeItem._original_filename = filenamenodeItem.setIcon(0, self.nodeIcon)
nodeItem.setText(0, filename)# 设置该节点在以前的flag基础上,多一个可编辑 ItemIsEditable
nodeItem.setFlags(nodeItem.flags() | Qt.ItemIsEditable)
在树节点文本被编辑时会触发ItemChanged信号
:
# 树节点文本被编辑后会触发ItemChanged信号
self.ui.tree_file.itemChanged.connect(self.item_changed)
对这个信号进行处理:
def item_changed(self, item, column):"""对文件重命名"""new_name = item.text(column)# 这个时候就用到了之前为树节点添加的属性_original_filename属性,保存原文件名original_name = item._original_filenameoriginal_path = os.path.join(self.thisFolderPath, original_name)new_path = os.path.join(self.thisFolderPath, new_name)# 检查新文件名是否已经存在if os.path.exists(new_path):QMessageBox.warning(self.ui, "错误", f"文件{new_path}已经存在, 请重新输入!!!")# 注意需要将名字改为原来的名字item.setText(column, original_name)else:# 如果文件名合法, 更新原始文件名属性item._original_filename = new_name# 进行文件重命名操作os.rename(original_path, new_path)
|
|
相关文章:
压测工具开发实战篇(四)——client子窗口功能
你好,我是安然无虞。 文章目录 树控件添加文件补充学习: 函数定义中循环体里的局部变量补充学习: 动态添加对象属性 刷新文件上下文菜单 (右键菜单)实现右键菜单功能 编辑节点文本 在学习本篇文章之前, 建议先看一下上篇介绍MDI子窗口的文章: 压测工具开发实战篇(三…...
如何开发 HTML 游戏
开发 HTML 游戏适合初学者学习编程和游戏开发的基础知识。HTML 游戏通常结合了 HTML、CSS 和 JavaScript 技术,利用浏览器的渲染能力来实现交互式的游戏体验。 1. 确定游戏类型 在开始开发之前,你需要明确你的游戏类型。例如: 简单游戏&…...
机器学习 从入门到精通 day_01
1. 机器学习介绍与定义 1.1 机器学习定义 机器学习(Machine Learning)本质上就是让计算机自己在数据中学习规律,并根据所得到的规律对未来数据进行预测。 机器学习包括如聚类、分类、决策树、贝叶斯、神经网络、深度学习(…...
React中的跨组件通信
在React中,跨组件通信有几种常见的方式。每种方式适用于不同的场景,下面是几种常见的跨组件通信方法: 1. 通过父子组件传递 Props 父组件可以通过 props 将数据传递给子组件,子组件只能接收和使用这些数据。 父组件(…...
Vue项目 bug 解决
Vue2项目部署失败 从gitee 上拉下一个前端项目,然后npm install,报错如下: 解决办法: 从 npm切换到cnpm:npm install -g cnpm执行命令export NODE_OPTIONS--openssl-legacy-provider下载依赖:cnpm instal…...
Python 3.13.2 安装教程(附安装包)轻松开启编程之旅
文章目录 前言软件介绍安装步骤1. 下载安装包2. 运行安装程序3. 选择安装选项4. 等待安装完成5. 验证安装结果 前言 在数字化时代,Python 作为一种简洁、高效且功能强大的编程语言,广泛应用于 Web 开发、数据科学、人工智能等诸多领域。无论是编程新手入…...
Meta 最新发布的 Llama 4:多模态开源大模型全面解析
TL;DR 2025 年 4 月 5 日,Meta AI 正式发布了第四代大型语言模型 Llama 4。引入了 Mixture-of-Experts (MoE,专家混合) 架构,同时原生支持多模态输入,最小的 Llama 4 Scout 模型支持 10m 的长文本输入。 Paper name The Llama 4…...
Web开发:常用 HTML 表单标签介绍
在 Web 开发中,HTML 表单是实现用户交互的关键元素,它为用户提供了输入数据的途径,广泛应用于注册登录、搜索查询、问卷调查等功能场景。本文将详细介绍常用的 HTML 表单标签及其使用方法。 表单容器标签 <form> <form>标签用…...
力扣HOT100之链表:2. 两数相加
这道题就是按照正常的数学思维去做的,设置一个标志位flag用来标记进位的情况,当发生进位时设置为1,否则设置为0,初始时设置为0。我们同时遍历两个链表,将两个节点的值相加,再加上上一位的进位flagÿ…...
Spring Boot 项目集成 License 授权与续期完整指南
一、背景说明 在 Spring Boot 项目中,通过引入第三方 spring-boot-starter-license 组件,可以快速实现系统权限到期控制、License 证书管理等功能。本文详细介绍如何集成 License 功能,并解决证书安装、权限配置、异常拦截及续期流程等关键问…...
2010年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析
2010年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激…...
典型的ETL使用场景与数据集成平台的应用
在当今数字化时代,数据已经成为企业决策和运营的核心资产。为了更好地管理和利用数据,企业需要借助高效的数据处理技术。ETL(Extract,Transform,Load)作为数据处理的核心技术之一,广泛应用于数据…...
深入解析嵌入式Linux系统架构:从Bootloader到用户空间 - 结合B站视频教学
B站视频链接,请多多关注本人B站: 📌 Yocto项目实战教程:第二章 视频讲解 目录 第2章 Linux系统架构 2.1 GNU/Linux2.2 Bootloader2.3 内核空间2.4 用户空间 总结 第2章 Linux系统架构 {#linux系统架构} 嵌入式Linux系统是Linux内核的精简版…...
从Oracle和TiDB的HTAP说起
除了数据库行业其他技术群体很多不知道HTAP的 时至今日还是有很多人迷信Hadoop,觉得大数据就是Hadoop。这是不正确的。也难怪这样,很多人OLTP和OLAP也分不清,何况HTAP。 Oracle是垂直方向实现 TiDB是水平方向实现 我个人认为这是两种流派…...
【Vue-路由案例】面经基础版
目录 <<回到导览1.面经基础版1.1.VueCli建项目1.1.1.VueCli 自定义项目1.1.2.ESlint代码规范 1.2.项目路由1.2.1.一级路由配置1.2.2.二级配置路由1.2.3.设置高亮1.2.4.发生请求、渲染1.2.5.跳转传参、再发请求1.2.6.体验优化1.2.7.keep-alive <<回到导览 1.面经基…...
C#调用C++动态库时出现`System.DllNotFoundException`错误的解决思路
文章目录 1. DLL文件路径问题2. 依赖的运行时库缺失3. 平台不匹配(x86/x64)4. 导出函数名称不匹配5. DLL文件损坏或权限问题6. 运行时库冲突(MT/MD不匹配)7. 使用DLLImport时的常见错误总结步骤 在C#中调用C动态库时出现System.Dl…...
数据清洗
map阶段:按行读入内容,对内容进行检查,如果字段的个数少于等于11,就删除这条日志(不保留)去除日志中字段个数小于等于11的日志内容。 <偏移量,第一行的内容> → <通过刷选之后的第一行…...
ubuntu 20.04 编译和运行A-LOAM
1.搭建文件目录和clone代码 mkdir -p A-LOAM/src cd A-LOAM/src git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM cd .. 2.修改代码文件 2.1 由于PCL版本1.10,将CMakeLists.txt中的C标准改为14: set(CMAKE_CXX_FLAGS "-stdc14"…...
Oracle迁移翻车,数据校验没做好...
作为DBA,你是否经历过这样的噩梦?数据库迁移、主从同步、容灾切换后,数据不一致却迟迟无法定位,只能手动写脚本逐表比对,熬到凌晨还在查差异… Oracle GoldenGate Veridata(OGG Veridata) 就是…...
小刚说C语言刷题——第17讲 循环之for语句
在生活中,我们经常会碰到重复去做某一件事。例如,一个人绕着操场跑圈,一天24小时往复。这些周而往复的事,我们称为循环。 1.循环的作用 在编程时,我们用循环的目的有两个。一个是减少循环时代码量,一个是通…...
如何使用 Coze 的 HTTP 请求节点实现高效数据交互
如何使用Coze的HTTP请求节点实现高效数据交互 在自动化工作流开发中,与外部服务进行数据交互是核心需求之一。Coze平台的HTTP请求节点提供了强大的解决方案,支持通过HTTP协议实现数据的获取、提交、更新和删除等操作。本文将结合官方文档,详…...
【力扣hot100题】(071)每日温度
经典单调栈问题。 感觉自己对这类问题还是不太熟练,想了很久思路,还想了很久是单调递增栈还是单调递减栈…… 方法是维护一个单调递减栈。先将结果result初始化为0,如果温度一直递减,那么result就不用变化了。 遍历每日温度&am…...
ChatBI的落地挑战——技术先进≠产品可用
近年来,大语言模型(LLM)的爆发让“对话式BI”(ChatBI)成为行业热点。然而,许多企业发现,尽管技术Demo令人惊艳,实际落地却困难重重——用户提问率低、回答准确度不稳定、使用场景模糊…...
1.2 测试设计阶段:打造高质量的测试用例
测试设计阶段:打造高质量的测试用例 摘要 本文详细介绍了软件测试流程中的测试设计阶段,包括测试用例设计、测试数据准备、测试环境搭建和测试方案设计等内容。通过本文,读者可以系统性地了解测试设计的方法和技巧,掌握如何高效…...
x64dbg调试python解释器
可以先写个input()这会让dbg中断在ntdll模块中,查看调用堆栈在系统调用结束后的打断点 然后直接断到PyObject_Vectorcall函数...
浙江大学DeepSeek系列专题线上公开课第二季第四期即将上线!端云协同:让AI更懂你的小心思! - 张圣宇 研究员
今晚8点10分左右,端云协同:让AI更懂你的小心思!浙大学者张圣宇研究员将揭秘人机交互新玩法。浙江大学DeepSeek系列专题线上公开课第二季第四期即将上线! 讲座 主题: 大小模型端云协同赋能人机交互 主讲人:…...
【项目管理】第3章 信息系统治理 --知识点整理
相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 对应:第1章-第5章 (二)知识笔记 三、信息系统治理 本文涉及信息系统治理与审计的核心知识。 1)…...
算法与数据结构线性表之栈和队列
Hello大家好! 很高兴与大家见面! 给生活添点快乐,开始今天的编程之路。 我的博客:<但愿. 我的专栏:C语言、题目精讲、算法与数据结构、C 欢迎点赞,关注 一 栈 1概念:栈是⼀种特殊的线性表,其只允许…...
【Introduction to Reinforcement Learning】翻译解读2
2.2 马尔可夫决策过程(MDPs) 马尔可夫决策过程(MDP)为顺序决策提供了框架,其中动作不仅影响即时奖励,还会影响未来结果。与多臂老虎机问题不同,MDP中的即时奖励与延迟奖励相平衡。在多臂老虎机…...
2016年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析
2016年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...
UI测试(2)
1、HTML 是用来描述网页的一种语言。 指的是超文本标记语言 (Hyper Text Markup Language) ,HTML 不是一种编程语言,而是一种标记语言 (markup language) 负责定义页面呈现的内容:标签语言:<标签名>标签值<标签名>&am…...
Pr视频剪辑 Premiere Pro 2024 for Mac
Pr视频剪辑 Premiere Pro 2024 for Mac 文章目录 Pr视频剪辑 Premiere Pro 2024 for Mac一、介绍二、效果三、下载 一、介绍 Premiere Pro 2024 for Mac是一款专业的视频编辑软件,广泛应用于电影、电视、广告等领域。它为Mac用户提供了强大的剪辑、调色、音频处理等…...
电源测试系统自动化转型:Chroma 8000 与 NSAT-8000 核心功能对比解析
在全球制造业加速智能化升级的背景下,电源模块测试正从传统手动模式向自动化、智能化深度转型。作为企业降本增效与提升竞争力的关键,如何选择适配的测试系统成为行业焦点。本文聚焦市场主流的 Chroma 8000 与 NSAT-8000 两款系统,从功能设计…...
智能指针和STL库学习思维导图和练习
思维导图: #include <iostream> #include <vector> #include <string> using namespace std;// 用户结构体 struct User {string username;string password; };vector<User> users; // 存储所有注册用户// 使用迭代器查找用户名是否存在 ve…...
【JS】二分查找
题目 步骤 初始化指针:定义 left 和 right 两个指针,分别指向数组的起始位置和末尾位置,确定查找范围。进入循环:只要 left 小于等于 right,就继续执行循环,因为此时查找范围不为空。计算中间索引ÿ…...
Mamba模型
为什么要提出mamba模型? transformer特点:训练快,推理慢,计算成本O(n*n) Rnn的特点:训练慢,推理快,容易遗忘 其实很容易理解,因为RNN的输入只包含前一个隐…...
人工智能通识速览(Part4. 评估指标)
四、评估指标 1.回归模型 均方误差(MSE) 优点:数学性质良好,计算简单,对误差的惩罚力度较大,能很好地反映模型预测值与真实值之间的平均差异程度,便于比较不同模型的性能。缺点:由…...
IT运维服务方案
一、服务目标 IT 运维服务致力于构建稳固、高效且智能的信息系统生态,为客户的业务运营筑牢数字化根基。凭借前沿的主动式维护策略,运用大数据分析、智能监控等技术手段,提前洞察系统隐患,在萌芽阶段化解潜在故障。同时࿰…...
【简历全景认知2】电子化时代对简历形式的降维打击:从A4纸到ATS的生存游戏
一、当简历遇上数字洪流:传统形式的式微 在1990年代,一份排版精美的纸质简历还能让HR眼前一亮;但今天,超过75%的 Fortune 500 企业使用ATS(Applicant Tracking System)进行初筛,未优化的简历可能在5秒内就会沦为数字废土。这种变迁本质上符合「技术接纳生命周期」理论—…...
LLM面试题七
NLP算法工程师面试题8道|含解析 分类场景下bert和gptprompt的方式哪种会有更好效果,为什么? 在分类场景下,BERT比GPT更适合用于建模,因为BERT的结构中包含了双向的Transformer编码器,而GPT的结构中只包含单向的Transf…...
Semaphore
关于作者: CSDN内容合伙人、技术专家, 从零开始做日活千万级APP,带领团队单日营收超千万。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业化变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览…...
视频插帧EMAVFI:extracting motion and appearance via inter-frame attention for video
文章目录 EMAVFI:extracting motion and appearance via inter-frame attention for efficient video frame interpolation1.核心概述2.帧间注意力机制为什么可以表示运动信息3.网络架构4.dataset类5.demo推理和训练代码6.总结 EMAVFI:extracting motion and appearance via in…...
⑨数据中心-M-LAG技术配置
华三数据中心网络是指华三提供的专门设计用于数据中心环境的网络解决方案。这种网络通常具有高性能、可扩展性和可靠性,旨在支持大规模数据中心的需求。华三数据中心网络解决方案通常包括以下特点: 1. 高带宽:支持高密度数据中心环境中大量网…...
永磁同步电机无速度算法--基于HOPLL的滑模观测器
一、原理介绍 传统PLL算法为二阶系统,其实现是基于转速变化变化缓慢的假设,因此在转速频繁出现动态变化时会导致动态性能不佳。为改善系统动态性能,将转速微分量引入PLL中,作为附加状态变量,与电角速度及转速共同构成…...
【Linux网络】网络套接字socket
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 Socket 编程预备 理解源 IP 地址和目的 IP 地址 认识端口号 端口号范围划分…...
ubuntu wifi配置(命令行版本)
1、查询当前设备环境的wifi列表 nmcli dev wifi list2、连接wifi nmcli dev wifi connect "MiFi-SSID" password "Password" #其中MiFi-SSID是wifi的密码,Password是wifi的密码3、查看连接情况 nmcli dev status...
配环境的经验
pip install -e . 该命令用于以“编辑模式”(也称为开发模式)安装当前目录下的 Python 包,比如包含有 setup.py、setup.cfg 或 pyproject.toml 文件的项目-e 是 --editable 的简写。以编辑模式安装时,pip 会在你的 Python 环境中创…...
STM32cubmax配置STM32407VET6,实现网络通信
文章目录 一、开发准备1、硬件准备2、软件准备 二、STM32CubeMX工程配置步骤1、创建新工程 三、外设配置步骤1)调试接口(SWD)配置2)时钟配置3)串口(USART)配置4)IO口配置(…...
LeetCode 热题 100_完全平方数(84_279_中等_C++)(动态规划(完全背包))
LeetCode 热题 100_完全平方数(84_279) 题目描述:输入输出样例:题解:解题思路:思路一(动态规划(完全背包)): 代码实现代码实现(思路一…...
【C++】vector的底层封装和实现
目录 目录前言基本框架迭代器容量第一个测试,野指针异常第二轮测试,浅拷贝的问题 元素访问修改操作push_backinsert迭代器失效问题 erase 默认成员函数构造函数双重构造引发调用歧义 拷贝构造赋值重载析构函数 源码end 目录 前言 废话不多说࿰…...