文章目录

    • @[toc]
    • 1 概述
      • 1.1 PySide 能做什么?
      • 1.2 PySide 的优点
      • 1.3 PySide 的缺点
      • 1.4 示例代码(简单窗口)
    • 2 环境准备
      • 2.1 安装必要软件
      • 2.2 修改 pip 源
    • 3 PySide2
      • 3.1 环境要求
      • 3.2 配置PySide2
      • 3.3 工具配置
    • 4 PySide6
      • 4.1 环境
      • 4.2 配置PySide6
      • 4.3 工具配置
      • 4.4 修改pyside6-project lupdate的bug
    • 5 工具使用
      • 5.1 使用pyside6-project构建工程
      • 5.2 创建、打开ui文件
      • 5.3 生成翻译文件
      • 5.4 修改ts翻译文件
    • 6 工程管理脚本
    • 7 相关地址

1 概述

通常提到的 PyQt 实际上可以分为 PyQtPySide 两个分支。

PyQt6PySide6 都是基于 Qt 库开发的 Python 绑定,用于构建跨平台的图形用户界面(GUI)应用程序。它们在功能上非常相似,主要区别体现在授权方式、维护团队以及部分 API 设计上。

本文重点介绍通用 PySide 的环境配置、工具配置及使用方法,适用于在线、离线配置,兼容多个常用版本。

  • PySide 环境配置 是进行 PySide 开发的第一步,虽然基础但至关重要。
  • 在实际开发中,工具的使用 对开发效率影响较大。
  • 与 Qt 官方安装包“开箱即用”的体验不同,PySide 相对较新,存在较多版本差异和 bug,因此本文将总结以下内容:
    • 常用版本的环境搭建
    • 工具配置与使用技巧
    • 常见问题与 bug 的解决方案
  • 主要版本:
    • PySide2:基于 Qt 5(>=5.11);
    • PySide6:基于 Qt 6,是当前推荐使用的版本;

1.1 PySide 能做什么?

  1. 图形用户界面开发:使用 Qt 提供的 QWidget 或 QML 模块构建桌面应用程序界面。
  2. 跨平台支持:支持 Windows、macOS、Linux 等主流操作系统。
  3. 多媒体和网络功能:内置模块支持音视频播放、网络通信(如 HTTP 请求、WebSocket)等功能。
  4. 数据可视化:利用 Qt Charts、QOpenGLWidget 等模块实现图表展示和 3D 渲染。
  5. 嵌入式系统开发:可用于开发嵌入式设备的 UI,如工业控制面板、车载系统等。
  6. 与 Web 技术集成:使用 Qt WebEngine 模块可以嵌入网页内容或开发混合型应用。

1.2 PySide 的优点

优点描述
🌐 跨平台支持 Windows、Linux、macOS,甚至嵌入式系统。
📦 功能丰富提供 GUI、网络、数据库、多线程、绘图等一整套模块。
🔧 官方支持PySide 是 Qt 官方提供的 Python 绑定,更新及时、文档完善。
🚀 性能较好基于 C++ 的 Qt 引擎,性能优于 Tkinter 等纯 Python GUI 框架。
📐 支持 QML可以结合 QML 进行现代 UI 设计,适合动态界面。

1.3 PySide 的缺点

缺点描述
⚖️ 许可证复杂商业用途需要购买 Qt 许可证;开源项目可用 LGPL 协议。
📦 包体积较大打包发布时依赖较多,最终程序体积较大。
🧠 学习曲线陡峭Qt API 复杂,对新手有一定门槛,尤其是布局管理、信号槽机制等。
📱 移动端支持有限虽然支持 Android/iOS,但不如原生开发或 Flutter/Kivy 成熟。

1.4 示例代码(简单窗口)

from PySide6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout # 导入必要的模块app = QApplication([]) # 创建一个QApplication实例,这是所有PySide6应用程序的基础
w = QWidget() # 创建主窗口部件(QWidget),它将作为应用程序的主窗口
label = QLabel("Hello, PySide6!", w) # 创建一个标签控件(QLabel),显示文本 "Hello, PySide6!"w.show() # 显示主窗口app.exec() # 进入应用程序的主循环,等待用户交互

在这里插入图片描述


2 环境准备

2.1 安装必要软件

  1. Python:从 Python 官方网站 下载并安装。
  2. PyCharm:从 PyCharm 官方网站 下载并安装。
  3. Qt(可选):从 Qt 官方下载页面 下载并安装。虽然可以在 Qt Creator 中开发 PyQt 项目,但 PyCharm 对 Python 语法的支持更好。

2.2 修改 pip 源

为避免默认源安装速度过慢,建议使用 阿里云 pip 镜像。按以下步骤操作,如果不存在则创建:

  1. Windows系统:C:\Users\用户名\.pip\pip.conf
  2. Linux系统:~/.pip/pip.conf
  3. .pip 文件夹中创建一个 pip.conf 文件,并添加以下内容:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/[install]
trusted-host=mirrors.aliyun.com

3 PySide2

3.1 环境要求

支持环境

环境版本
PySide2python2.7、3.5<=python<=3.10
系统win7+、linux、MacOS

演示环境

环境版本
PySide2PySide2=5.15.2.1
pythonV3.8.10
系统windows10
pycharmpycharm-community-2024.3.5.exe

3.2 配置PySide2

方法1: 命令行安装(在线)

  • 使用pip install pyside2安装最新版本(网络状况差可能导致安装失败);
  • 使用pip install pyside2==5.15.2.1指定安装版本(网络状况差可能导致安装失败);
  • 使用pip install PySide2 --index-url https://mirrors.aliyun.com/pypi/simple 指定临时安装源进行安装;
  • 使用pip install https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64.whl指定下载地址进行安装;

方法2: 下载whl包安装(离线)

  • 进入Index of /official_releases/QtForPython/pyside2或者PySide2 ·PyPI下载whl包到本地;
  • 例如PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64.whl;
  • 然后使用pip install ./PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64.whl命令进行安装。

方法3: 使用pycharm安装(在线)

  • 打开pycharm,创建一个工程;

  • 选择python软件包,搜索PySide2,如下所示,点击【安装】;

    在这里插入图片描述


3.3 工具配置

pyside2或者pyside6<6.5的版本,内置工具不多,只有designer、lupdate、rcc、uic等几个;

如果需要用到其他工具,可以单独安装Qt安装包或者高版本的PySide6;

  • 安装完成PySide2后,打开pycharm,【文件】【设置】【工具】【外部工具】;

  • 点击+,如下所示配置pyside2-designer工具;

    在这里插入图片描述

  • 配置完成后,点击【工具】【外部工具】就可以打开UI设计器。

    在这里插入图片描述

  • 使用pyproject文件管理工程是一个更加简便的方式,但是只有在PySide6.5以上版本才支持,这里通过自己编写脚本,可以通过pyproject文件对工程进行管理,简化部分操作;

  • 在工程顶级路径下创建一个project.py文件;

  • 添加章节6脚本,运行脚本代码可自动执行重复操作,简化开发流程,避免出现基础错误。


4 PySide6

4.1 环境

支持环境

环境版本
PySide63.9<=python
系统win10+、linux、MacOS
支持win7系统python3.8 + PySide6.1.3

演示环境

环境版本
PySide6PySide6=6.8.3
pythonV3.13.3
系统windows10
pycharmpycharm-community-2024.3.5.exe

4.2 配置PySide6

  • 官方地址

安装方法1:使用命令行在线安装

  • 使用pip install PySide6目录安装默认版本;

  • 使用pip install pyside6==6.8.3安装指定版本;

  • 使用pip install PySide6 --index-url https://mirrors.aliyun.com/pypi/simple 指定安装源进行安装;

  • 使用pip install https://download.qt.io/official_releases/QtForPython/pyside6-essentials/PySide6_Essentials-6.8.2.1-cp39-abi3-win_amd64.whl指定下载地址进行安装;

  • 使用pip install --index-url=https://download.qt.io/snapshots/ci/pyside/6.4/latest pyside6 --trusted-host download.qt.io从指定服务器安装。

安装方法2: 使用pycharm安装

  • 打开pycharm,创建一个工程;

  • 选择python软件包,搜索PySide6,如下所示,点击【安装】;

    在这里插入图片描述

安装方法3: 下载whl安装包,离线安装,对于离线环境或者网络不好pip安装失败的环境可用;

  • 进入Index of /official_releases/QtForPython下载地址或者pypi下载地址;

  • 一般下载pyside6-essentials/和shiboken6-generator/、shiboken6就可以;

  • 分别进入pyside6-essentials/、shiboken6-generator/、shiboken6路径;

  • 选择自己需要的版本、系统,例如PySide6_Essentials-6.8.3-cp39-abi3-win_amd64.whl、shiboken6_generator-6.8.3-cp39-abi3-win_amd64.whl、shiboken6-6.9.0-cp39-abi3-win_amd64.whl,下载到本地,主要3个包版本要相同;

  • 然后执行pip install ./PySide6_Essentials-6.8.3-cp39-abi3-win_amd64.whl ./shiboken6_generator-6.8.3-cp39-abi3-win_amd64.whl ./shiboken6-6.9.0-cp39-abi3-win_amd64.whl命令进行安装。


4.3 工具配置

  1. 打开【设置】【工具】【外部工具】,点击+;

  2. 添加designer,设置程序路径工作目录如下所示;

    在这里插入图片描述

  3. 添加pyside6-project,用于构建pyside工程;

    在这里插入图片描述

  4. 更新翻译文件(ts)

    在这里插入图片描述

  5. 打开翻译文件pyside6-linguist

    在这里插入图片描述


4.4 修改pyside6-project lupdate的bug

  • 使用 pyside6-project lupdate 命令可以在 PySide6 中生成翻译使用的 ts 文件,但存在一些问题:

    • 无法将 ts 文件放在子文件夹下。
    • 无法清除已经失效的文本。
  • 这是因为 pyside6-project lupdate 中使用的是 ts 文件名,不包含路径,所以会在工程路径下执行,并且有几个 ts 文件就会执行几次。

  • 解决办法:打开 .venv\Lib\site-packages\PySide6\scripts\project.py 文件,在 def lupdate(self) 函数中修改为以下代码:

    def lupdate(self):for sub_project_file in self.project.sub_projects_files:Project(project_file=sub_project_file).lupdate()if not self.project.ts_files:print(f"{self.project.project_file.name}: No .ts file found.",file=sys.stderr)returnsource_files = self.project.python_files + self.project.ui_filesproject_dir = self.project.project_file.parentcmd_prefix = [LUPDATE_CMD] + [os.fspath(p.relative_to(project_dir)) for p in source_files]cmd_prefix.append("-ts")ts_files = []for ts_file in self.project.ts_files:if requires_rebuild(source_files, ts_file):ts_dir = ts_file.parentif not ts_dir.exists():ts_dir.mkdir(parents=True, exist_ok=True)ts_files.append(ts_file.resolve().as_posix())if ts_files:cmd = cmd_prefix;cmd.extend(ts_files)cmd.append("-no-obsolete") # 清除失效文本run_command(cmd, cwd=project_dir)
    
  • 修改后,运行 pyside6-project.exe lupdate 命令就会将 ts 文件生成到指定路径中,并且只执行一次。

    (.venv) PS E:\Code\py\Test> pyside6-project.exe lupdate
    pyside6-lupdate main.py mainwindow.py TableWidget.py mainwindow.ui logwidget.ui control.ui -ts E:/Code/py/Test/Language/Test_zh_CN.ts E:/Code/py/Test/Language/Test_en_US.ts
    

5 工具使用

5.1 使用pyside6-project构建工程

  1. 需要pyside6.5以上版本支持,低版本可以通过自定义脚本支持(见后续章节);

  2. 创建一个名称.pyproject文件;

  3. 按以下格式添加需要构建的文件名称,会批量将 ui 文件生成 ui_name.py 文件:

    {"files": ["main.py","widget.ui","widget1.ui"]
    }
    
  4. 运行python project.py -o 命令,自动将所有文件加载到.pyproject工程文件进行管理;

  5. 鼠标点击【工具】【外部工具】【pyside6-project】,完成工程构建;

    • 将ui、qrc文件生成为py文件;

    • .ts翻译文件编译为.qm文件;

    在这里插入图片描述

  6. 注意:pyside6-project需要tomlkit库支持。


5.2 创建、打开ui文件

  1. 鼠标点击【工具】【外部工具】【pyside6-designer】,打开设计师窗口;

    在这里插入图片描述

  2. 选择创建窗体类型,点击【创建】

    在这里插入图片描述

  3. 创建完成后,按【Ctrl + S】将ui文件保存到工程文件夹中;

  4. 创建完成后在pycharm中就可以看见ui文件了,双击ui文件就可以使用设计器打开;

    在这里插入图片描述


5.3 生成翻译文件

  1. 生成pyproject工程文件;

  2. 打开.pyproject工程文件,添加生成.ts翻译文件的路径;

    {"files": ["main.py","res/res.qrc","res/language/en_US.ts","res/language/zh_CN.ts",]
    }
    
  3. 鼠标点击【工具】【外部工具】【lupdate】,自动将代码中需要翻译的文本输出到.ts文件,如果ts文件不存在则会自动创建,如果已存在则会更新;

  4. 如果是小于PySide6.5版本,则使用自定义脚本命令python project.py -lupdate


5.4 修改ts翻译文件

  1. 使用lupdate生成.ts文件;

  2. 鼠标选中.ts文件,右键【外部工具】【pyside6-linguist】,打开Qt语言家

    在这里插入图片描述

  3. Qt语言家窗口中可将文本翻译为指定语言。

    在这里插入图片描述


6 工程管理脚本

  • 输入python project.py -h 查看脚本使用方法。

    在这里插入图片描述

"""
这个文件是用来搜索当前路径下所有py、ui、qrc、ts文件,并生成pyproject文件。
不再需要手动谢pyproject文件,只需要运行这个文件即可。
支持自动执行 Qt 用户界面编译器(uic)和 Qt 资源编译器(rcc);
支持自动执行 Qt 语言文件更新工具(lupdate);
"""
import fnmatch
import json
import os
import subprocess
from pathlib import Path  # 更安全的路径处理
import importlib.util
import argparse
import sysdef list_files(directory='.', include_patterns=None, exclude_patterns=None, ignore_folders=None):"""列出指定目录下所有匹配指定模式的文件:param directory:        查询目录:param include_patterns: 搜索的文件,支持通配符:param exclude_patterns: 需要排除的文件,支持通配符:param ignore_folders:   需要忽略的文件夹:return: 匹配的文件列表,JSON 格式,输出为pyproject文件可用格式"""if include_patterns is None:include_patterns = {'*.py', '*.ui', '*.qrc', '*.ts'}if exclude_patterns is None:exclude_patterns = set()if ignore_folders is None:ignore_folders = set()files_list = []for root, dirs, files in os.walk(directory):# 过滤需要忽略的文件夹dirs[:] = [d for d in dirs if d not in ignore_folders]for file in files:# 检查文件是否匹配需要包含的通配符模式,并且不匹配需要排除的通配符模式if any(fnmatch.fnmatch(file, pattern) for pattern in include_patterns) and \not any(fnmatch.fnmatch(file, pattern) for pattern in exclude_patterns):# 计算相对路径relative_path = os.path.relpath(os.path.join(root, file), directory)relative_path = relative_path.replace('\\', '/')files_list.append(relative_path)# 返回 JSON 格式的文件列表return json.dumps({"files": files_list}, indent=4)def run_uic(project_name=None):"""执行 Qt 用户界面编译器(uic)的自动化流程▼ 典型工作流程:1. 定位 Qt 用户界面编译器(uic)2. 加载项目配置文件(JSON格式)3. 遍历配置文件中的 ui 文件路径4. 构建 uic 命令行参数5. 执行命令并处理执行结果,将ui文件编译为py文件"""project_file = Path(project_name).resolve()with open(project_file, 'r', encoding='utf-8') as f:config = json.load(f)# ▼ 配置有效性验证if 'files' not in config or not isinstance(config['files'], list):raise ValueError("配置文件必须包含 'files' 列表")ui_files = [Path(f).resolve() for f in config["files"] if f.endswith('.ui')]for ui_file in ui_files:filename = os.path.basename(ui_file)parent_dir = os.path.dirname(ui_file)out_file = os.path.join(parent_dir, 'ui_' + filename.replace('.ui', '.py'))if importlib.util.find_spec('PySide6') is not None: # 优先使用 PySide6, 如果找不到则使用 PySide2cmd_args = ['pyside6-uic', str(ui_file), '-o', out_file]elif importlib.util.find_spec('PySide2') is not None:cmd_args = ['pyside2-uic', str(ui_file), '-o', out_file]result = subprocess.run(cmd_args,stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True,check=True)print(f"执行命令: {result.args}")def run_rcc(project_name=None):"""执行 Qt 资源编译器(rcc)的自动化流程▼ 典型工作流程:1. 定位 Qt 资源编译器(rcc)2. 加载项目配置文件(JSON格式)3. 遍历配置文件中的 qrc 文件路径4. 构建 rcc 命令行参数5. 执行命令并处理执行结果,将qrc文件编译为py文件"""project_file = Path(project_name).resolve()with open(project_file, 'r', encoding='utf-8') as f:config = json.load(f)# ▼ 配置有效性验证if 'files' not in config or not isinstance(config['files'], list):raise ValueError("配置文件必须包含 'files' 列表")rc_files = [Path(f).resolve() for f in config["files"] if f.endswith('.qrc')]for rc_file in rc_files:filename = os.path.basename(rc_file)parent_dir = os.path.dirname(rc_file)out_file = os.path.join(parent_dir, 'rc_' + filename.replace('.qrc', '.py'))if importlib.util.find_spec('PySide6') is not None:cmd_args = ['pyside6-rcc', str(rc_file), '-o', out_file]elif  importlib.util.find_spec('PySide2') is not None:cmd_args = ['pyside2-rcc', str(rc_file), '-o', out_file]result = subprocess.run(cmd_args,stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True,check=True)print(f"执行命令: {result.args}")def run_lupdate(project_name=None):"""执行 Qt 语言文件更新工具(lupdate)的自动化流程▼ 典型工作流程:1. 定位 Qt 语言更新工具(lupdate)2. 加载项目配置文件(JSON格式)3. 构建 lupdate 命令行参数4. 执行命令并处理执行结果▼ 配置文件要求:- 必须包含 'files' 键,值为文件路径列表- 示例配置:{"files": ["src/*.py","translations/zh_CN.ts","translations/en_US.ts"]}异常:ValueError: 当配置文件格式无效时抛出"""# 初始化路径对象(使用 pathlib 处理跨平台路径问题)# language: PySide6 语言更新工具的可执行路径# project_file: 项目配置文件路径(包含待翻译文件列表)# ts_files: 生成的翻译文件目标路径列表(中英文版本)if importlib.util.find_spec('PySide6') is not None:lupdate = Path('pyside6-lupdate.exe').resolve() # lupdate 工具路径,如果不存在,请手动修改路径# 构建基础命令参数(使用字符串显式转换保证兼容性)cmd_args = [str(lupdate), '-no-obsolete'] # -no-obsolete 选项用于排除已过时的翻译elif importlib.util.find_spec('PySide2') is not None:lupdate = Path('pyside2-lupdate.exe').resolve() # lupdate 工具路径,如果不存在,请手动修改路径# 构建基础命令参数(使用字符串显式转换保证兼容性)cmd_args = [str(lupdate), '-noobsolete']project_file = Path(project_name).resolve()try:# 读取并解析项目配置文件(JSON 格式)# 将配置中的文件列表添加到命令参数中with open(project_file, 'r', encoding='utf-8') as f:config = json.load(f)# ▼ 配置有效性验证if 'files' not in config or not isinstance(config['files'], list):raise ValueError("配置文件必须包含 'files' 列表")# 过滤掉以 .ts 为后缀的文件filtered_files = [file for file in config['files'] if not file.endswith('.ts')]cmd_args.extend(filtered_files)  # 直接扩展参数列表# 从文件列表中筛选出以 .ts 结尾的文件路径# ts_files: 生成的翻译文件目标路径列表(中英文版本)ts_files = [Path(f).resolve() for f in config["files"] if f.endswith('.ts')]# ▼ 防止无翻译文件导致命令错误if not ts_files:print("警告:未发现.ts翻译文件")return# 添加翻译文件生成参数# -ts 参数后接转换后的字符串路径列表cmd_args.extend(['-ts', *map(str, ts_files)])# 执行外部命令并捕获输出# 使用 check=True 自动检查非零返回码# text=True 自动解码输出内容为字符串result = subprocess.run(cmd_args,stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True,check=True)print(f"执行命令: {' '.join(result.args)}")# ▼ 输出处理策略if result.stdout:print("输出日志:\n" + result.stdout)if result.stderr:print("错误信息:\n" + result.stderr)# ▼ 异常处理优先级调整except FileNotFoundError as e:print(f"关键文件缺失: {e.filename}")except json.JSONDecodeError as e:print(f"Json 解析错误: {project_file}: {e}")except subprocess.CalledProcessError as e:print(f"指令运行失败 (code {e.returncode}):\n{e.stderr}")except ValueError as e:print(f"配置验证失败: {e}")def find_pyproject_files(directory='.'):pyproject_files = []for root, dirs, files in os.walk(directory):for file in files:if fnmatch.fnmatch(file, '*.pyproject'):pyproject_files.append(os.path.join(root, file))return pyproject_filesif __name__ == '__main__':# 1. 创建解析器parser = argparse.ArgumentParser(description='工程管理')# 2. 添加参数parser.add_argument('-o', '--output', action='store_true', help='自动遍历当前路径下所有py、ui、qrc、ts文件,并生成pyproject文件')parser.add_argument('-b', '--build', action='store_true', help='构建项目,使用pyproject文件生成ui、qrc文件的py文件')parser.add_argument('-u', '--lupdate', action='store_true', help='执行 Qt 语言文件更新工具(lupdate)')parser.add_argument('-p', '--pyproject', type=str, help='指定pyproject文件路径,如果不指定则使用当前路径下的pyproject文件')# 3. 解析参数args = parser.parse_args()# 获取pyproject文件路径pyproject_file = args.pyprojectif not pyproject_file:pyprojects = find_pyproject_files()if pyprojects:pyproject_file = pyprojects[0]cmd_num = len(sys.argv) - 1if args.output or cmd_num == 0: # 使用-o  参数或者无参数时,执行输出# 列出当前路径下所有.py、.ui、.qrc、.ts文件,忽略.temp类型的文件和名为temp的文件夹ret = list_files(include_patterns={'*.py', '*.ui', '*.qrc', '*.ts'},exclude_patterns={'__init__.py', 'project.py', 'ui_*', 'rc_*'}, ignore_folders={'.venv'})if pyproject_file:with open(pyproject_file, 'w', encoding='utf-8') as project:project.write(ret)if args.build:if pyproject_file:# 可以选择不执行后面三个函数run_uic(pyproject_file) # 执行 Qt 用户界面编译器, 将ui文件编译为py文件run_rcc(pyproject_file) # 执行 Qt 资源编译器, 将qrc文件编译为py文件if args.lupdate:run_lupdate(pyproject_file) # 执行 Qt 语言文件更新工具(lupdate)

7 相关地址

  • Qt for Python地址
  • 模块 API - Qt for Python
  • PySide下载地址
  • pyside6下载地址1
  • pyside6下载地址2
  • PySide6包依赖
  • PyQt6地址
  • PyQt6文档
  • PyQt6下载地址

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据标注师学习内容

目录 文本标注词性标注实体标注 图像标注语音标注 文本标注 词性标注 第一篇 第二篇 实体标注 点击这里 关系标注 事件标注 意图标注 关键词标注 分类标注 问答标注 对话标注 图像标注 拉框标注 关键点标注 2D标注 3D标注 线标注 目标跟踪标注 OCR标注 图像分类标注 语音…

【linux】文件与目录命令 - rsync

文章目录 1. 基本用法2. 常用参数3. 用法举例4. 注意事项 rsync 命令用于快速同步文件和目录&#xff0c;可用于本地和远程传输&#xff0c;支持增量同步、压缩、权限保留等特性。 1. 基本用法 语法&#xff1a; rsync [选项] 源 目标功能&#xff1a; 高效增量同步&#xff…

互联网大厂Java求职面试:电商系统高并发设计

互联网大厂Java求职面试&#xff1a;电商系统高并发设计 文章内容 面试官&#xff08;技术总监&#xff09;与郑薪苦的对话 面试官&#xff1a; “郑薪苦&#xff0c;欢迎来到我们的面试。今天我们会围绕一个非常热门的话题——电商系统的高并发设计进行深入探讨。你之前在某…

Nginx跨云反向代理排错:解密配置参数的“陷阱”

前言&#xff1a;在当今的云计算环境中&#xff0c;跨云平台的应用部署变得越来越常见。为了验证跨云平台反向代理的可行性&#xff0c;我们进行了一次测试。本次测试将后端程序部署在阿里云服务器&#xff0c;同时使用在腾讯云注册的已备案国内域名。我们在腾讯云控制台将域名…

股票账户的管理和交易

中国证券登记结算有限责任公司&#xff08;简称“中国结算”&#xff09;确实是负责股票的账户管理&#xff08;开户、销户&#xff09;和登记、存管、清算、交收等后台业务的中央机构。它确保了股票所有权的准确记录和交易后资金与证券的最终转移。 而股票的交易业务&#xff…

Arcgis地理配准变换方法说明

零阶多项式 - 将使用零阶多项式来平移数据。 当已对数据进行地理配准但通过微小的平移可以更好的排列数据时&#xff0c;通常使用该多项式。 执行零阶多项式平移只需要一个连接线。相似性多项式 - 将使用一阶变换&#xff0c;尝试保持原始栅格的形状。 RMS 错误会高于其他多项式…

深入理解 C++ volatile 与 atomic:五大用法解析 + 六大高频考点

一、volatile volatile是C中一个非常重要的关键字。volatile关键字告诉编译器&#xff0c;被修饰的变量可能会在程序控制之外被改变&#xff0c;因此编译器不能对该变量的访问进行优化。什么意思呢&#xff1f;现代处理器架构中&#xff0c;有寄存器&#xff0c;L1缓存&#x…

跨主机管理Docker容器化应用的操作与技巧

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; 环境准备与 Docker 安装 在开始跨主机管理 Docker 容器化应用之前&#xff0c;需要确保所有主机上都安装了 Docker 引擎&#xff0c;并且这些主机之间可以通过 SSH 协议进行通信。本节将详细介绍环境准备和 Doc…

编程实践:sigmastar330 调用IVE图像处理加速

说明:本专栏文章有两种解锁方案 1:付费订阅,畅享所有文章 2:免费获取,点击下方链接,关注,自动获取免费链接 https://free-img.400040.xyz/4/2025/04/29/6810a50b7ac8b.jpg 主题:利用IVE进行图像处理加速 Sigmastar 支持的硬件操作,基本都在:mi_ive.h 文件中,本文…

Nginx+PHP+MySQL安装参考

NginxPHPMySQL安装参考 CentOS7环境 配置CentOS7网络&#xff1a; CentOS(最小安装)默认是不打开网络的 启动网络 vi打开&#xff1a;/etc/sysconfig/network-scripts/ifcfg-ens33 文件 将 “ONBOOT:no”属性修改为&#xff1a;“ONBOOT:yes” 重启网络服务 # sudo service …

JavaScript中的反射魔法:揭秘Reflect对象的核心方法(下)

JavaScript中的Reflect对象&#xff1a;高级方法解析&#xff08;下&#xff09; 在JavaScript中&#xff0c;Reflect对象不仅提供了基础的对象操作方法&#xff08;如get、set等&#xff09;&#xff0c;还包含了许多高级API&#xff0c;用于更精细地控制对象行为。本文将继续…

【数字人开发】Unity+百度智能云平台实现长短文本个性化语音生成功能

一、创建自己的应用 百度智能云控制台网址&#xff1a;https://console.bce.baidu.com/ 1、创建应用 2、获取APIKey和SecretKey 3、Api调试 调试网址&#xff1a;https://console.bce.baidu.com/support/?timestamp1750317430400#/api?productAI&project%E8%AF%AD%E9%…

银河麒麟 | ubuntu 搭建属于自己的邮件服务器

目录 遇权不绝就转root 更新系统 安装 Postfix 配置 Postfix 重启 Postfix 安装 Dovecot 配置 Dovecot 编辑 Dovecot 的 IMAP 配置文件 编辑 Dovecot 的用户认证配置文件 编辑 Dovecot 的服务配置文件 重启 Dovecot 安装发送邮箱功能 发送邮件 测试 遇权不绝就转…

嵌入式通信协议框架的四层架构设计与实现

文章目录 一、硬件抽象层&#xff1a;数据收发的基石1.1 设计要点1.2 代码示例 二、协议管理层&#xff1a;智能路由中枢2.1 设计要点2.2 代码示例 三、协议处理层&#xff1a;协议具体实现3.1 设计要求3.2代码示例3.2.1 协议公共定义3.2.2 协议一设计3.2.3 协议二设计 四、应用…

RA信号处理

ra_snr_gui.m 作用&#xff1a;统计不同信噪比下&#xff0c;五种信号的峰值旁瓣比RA和低高频均值比RM&#xff0c;绘制结果&#xff0c;参考图3.11和3.12 DFCW_RA_SNR.m 作用&#xff1a;产生正交离散频率编码信号&#xff0c;并计算峰值旁瓣比RA和低高频均值比 RM LFM_RA_S…

【go的测试】单测之gomock包与gomonkey包

目录 使用gomock包 1. 安装mockgen 2. 定义接口 3. 生成mock文件 4. 在单测中使用mock的函数 5. gomock 包的使用问题 使用gomonkey包 1. mock 一个包函数 2. mock 一个公有成员函数 3. mock 一个私有成员函数 使用gomock包 1. 安装mockgen go get -u github.com/go…

html实现登录与注册功能案例(不写死且只使用js)

目录 案例需求 实现思路 代码参考 login.html register.html 运行效果 升级思路 案例需求 需要一个登录界面和注册页面实现一个较为完整的登录注册功能 1.登录界面没有登录限制需求&#xff08;降低难度&#xff09;&#xff0c;实现基本的登录判断需求&#xff0c;弹窗…

PHP is the best language.

PHP很好写。 众所周知Python很好写&#xff0c;Python 也能开发 Web 应用&#xff0c;但和 PHP 相比&#xff0c;在“直接处理网页”这件事上&#xff0c;PHP 更加贴近底层和原生。 想快速搭建原型或者 B 端后台工具&#xff0c;不妨用 PHP Laravel 来搞&#xff0c;真的很香…

Mybatis-Plus 在 getOne() 的时候要加上 .last(“limit 1“)

1.先写结论: 1.为了确保 SQL 查询只返回一条记录&#xff08;当查询返回多条时会报错->多为代码本身问题&#xff09;。 2.防止数据库执行全表扫描 3.参考网址&#xff1a;问题记录&#xff1a;MyBatis-Plus 中 ServiceImpl 类的 getOne_mybatis_无他&唯手熟尔-2048…

C语言:二分搜索函数

一、二分搜索基本概念 二分搜索&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元素的高效算法&#xff0c;时间复杂度为O(log n)。 基本特点&#xff1a; 仅适用于有序数组&#xff08;升序或降序&#xff09; 每次比较将搜索范围减半 比线性搜索(O(n))…