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

PyQt5完整指南:从入门到实践

引言

PyQt5是Python编程语言的一个GUI(图形用户界面)工具包,它是Qt5应用程序框架的Python绑定。Qt是一个跨平台的C++应用程序开发框架,被广泛用于开发GUI程序和非GUI程序。PyQt5让Python开发者能够使用Python语言享受到Qt框架的强大功能。

在这篇博客中,我们将深入探讨PyQt5的各个方面,从基础安装到创建复杂的GUI应用程序。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实用的示例。

什么是PyQt5?

PyQt5是由Riverbank Computing开发的一组Python模块。它包含了超过620个类和6000个函数和方法。它是一个多平台工具包,可以运行在所有主要操作系统上,包括Unix、Windows和Mac OS。

PyQt5的主要特点

  • 跨平台性:一次编写,到处运行
  • 丰富的控件:提供了大量预制的UI组件
  • 强大的功能:支持2D/3D图形、SQL数据库、网络等
  • 原生外观:应用程序能够与操作系统的原生外观保持一致
  • 支持多线程:能够创建响应式的应用程序
  • 完善的文档:有详细的API文档和大量的示例代码

安装PyQt5

安装PyQt5非常简单,你可以使用pip包管理器(貌似在venv虚拟环境下安装会报错):

pip install PyQt5

如果你需要使用Qt Designer(可视化GUI设计工具),还需要安装:

pip install pyqt5-tools

确认安装成功,可以在Python中导入PyQt5:

import PyQt5
print(PyQt5.__version__)

PyQt5基础概念

1. 应用程序和窗口

每个PyQt5应用程序都必须创建一个应用程序对象。这个对象管理着应用程序的控制流和主要设置。

import sys
from PyQt5.QtWidgets import QApplication, QWidget# 创建应用程序对象
app = QApplication(sys.argv)# 创建窗口
window = QWidget()
window.setWindowTitle('第一个PyQt5应用')
window.setGeometry(100, 100, 300, 200)  # x, y, width, height
window.show()# 运行应用程序
sys.exit(app.exec_())

在这里插入图片描述

2. 信号与槽机制

PyQt5使用信号和槽机制来处理事件。信号是在特定事件发生时发出的,而槽是响应信号的函数。

from PyQt5.QtWidgets import QApplication, QPushButton, QWidget
import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):button = QPushButton('点击我', self)button.clicked.connect(self.on_click)  # 连接信号和槽button.move(50, 50)self.setWindowTitle('信号与槽示例')self.setGeometry(300, 300, 200, 150)self.show()def on_click(self):print('按钮被点击了!')app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

在这里插入图片描述

3. 布局管理

PyQt5提供了几种布局管理器来自动管理窗口小部件的位置和大小:

  • QHBoxLayout:水平布局
  • QVBoxLayout:垂直布局
  • QGridLayout:网格布局
  • QFormLayout:表单布局
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
import sysclass LayoutExample(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):layout = QVBoxLayout()# 添加按钮到布局for i in range(1, 4):button = QPushButton(f'按钮 {i}')layout.addWidget(button)self.setLayout(layout)self.setWindowTitle('布局示例')self.show()app = QApplication(sys.argv)
ex = LayoutExample()
sys.exit(app.exec_())

在这里插入图片描述

PyQt5核心组件

1. 常用窗口小部件

  • QLabel:显示文本或图像
  • QLineEdit:单行文本输入
  • QTextEdit:多行文本输入
  • QPushButton:按钮
  • QCheckBox:复选框
  • QRadioButton:单选按钮
  • QComboBox:下拉列表
  • QSpinBox:数字选择器
  • QSlider:滑块
  • QProgressBar:进度条

2. 对话框

PyQt5提供了多种预定义的对话框:

from PyQt5.QtWidgets import QMessageBox, QFileDialog, QInputDialog# 消息框
QMessageBox.information(self, '标题', '这是一条信息')# 文件对话框
filename, _ = QFileDialog.getOpenFileName(self, '打开文件', '.', '文本文件(*.txt)')# 输入对话框
text, ok = QInputDialog.getText(self, '输入对话框', '请输入你的名字:')

3. 菜单和工具栏

from PyQt5.QtWidgets import QMainWindow, QAction, QMenuBar
from PyQt5.QtGui import QIconclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):# 创建菜单栏menubar = self.menuBar()fileMenu = menubar.addMenu('文件')# 创建动作newAction = QAction('新建', self)newAction.setShortcut('Ctrl+N')newAction.triggered.connect(self.newFile)fileMenu.addAction(newAction)self.setWindowTitle('菜单示例')self.show()def newFile(self):print('创建新文件')

创建一个完整的示例应用

让我们创建一个简单的文本编辑器应用程序,来展示PyQt5的实际应用:

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTextEdit, QAction, QFileDialog, QMessageBox)
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qtclass TextEditor(QMainWindow):def __init__(self):super().__init__()self.initUI()self.currentFile = Nonedef initUI(self):# 创建文本编辑器self.textEdit = QTextEdit()self.setCentralWidget(self.textEdit)# 创建菜单栏menubar = self.menuBar()# 文件菜单fileMenu = menubar.addMenu('文件')# 新建动作newAction = QAction('新建', self)newAction.setShortcut('Ctrl+N')newAction.triggered.connect(self.newFile)fileMenu.addAction(newAction)# 打开动作openAction = QAction('打开', self)openAction.setShortcut('Ctrl+O')openAction.triggered.connect(self.openFile)fileMenu.addAction(openAction)# 保存动作saveAction = QAction('保存', self)saveAction.setShortcut('Ctrl+S')saveAction.triggered.connect(self.saveFile)fileMenu.addAction(saveAction)# 退出动作exitAction = QAction('退出', self)exitAction.setShortcut('Ctrl+Q')exitAction.triggered.connect(self.close)fileMenu.addAction(exitAction)# 编辑菜单editMenu = menubar.addMenu('编辑')# 复制动作copyAction = QAction('复制', self)copyAction.setShortcut('Ctrl+C')copyAction.triggered.connect(self.textEdit.copy)editMenu.addAction(copyAction)# 粘贴动作pasteAction = QAction('粘贴', self)pasteAction.setShortcut('Ctrl+V')pasteAction.triggered.connect(self.textEdit.paste)editMenu.addAction(pasteAction)# 设置窗口属性self.setWindowTitle('简单文本编辑器')self.setGeometry(100, 100, 800, 600)self.show()def newFile(self):self.textEdit.clear()self.currentFile = Noneself.setWindowTitle('简单文本编辑器 - 新文件')def openFile(self):filename, _ = QFileDialog.getOpenFileName(self, '打开文件', '.', '文本文件 (*.txt);;所有文件 (*.*)')if filename:try:with open(filename, 'r', encoding='utf-8') as f:text = f.read()self.textEdit.setText(text)self.currentFile = filenameself.setWindowTitle(f'简单文本编辑器 - {filename}')except Exception as e:QMessageBox.critical(self, '错误', f'无法打开文件: {str(e)}')def saveFile(self):if self.currentFile:self.saveToFile(self.currentFile)else:self.saveAsFile()def saveAsFile(self):filename, _ = QFileDialog.getSaveFileName(self, '保存文件', '.', '文本文件 (*.txt);;所有文件 (*.*)')if filename:self.saveToFile(filename)def saveToFile(self, filename):try:with open(filename, 'w', encoding='utf-8') as f:text = self.textEdit.toPlainText()f.write(text)self.currentFile = filenameself.setWindowTitle(f'简单文本编辑器 - {filename}')QMessageBox.information(self, '成功', '文件保存成功')except Exception as e:QMessageBox.critical(self, '错误', f'无法保存文件: {str(e)}')if __name__ == '__main__':app = QApplication(sys.argv)editor = TextEditor()sys.exit(app.exec_())

请添加图片描述

高级特性

1. 多线程

在GUI应用程序中,使用多线程来处理耗时操作是很重要的,以保持界面的响应性:

from PyQt5.QtCore import QThread, pyqtSignal
import timeclass WorkerThread(QThread):progress = pyqtSignal(int)finished = pyqtSignal()def run(self):for i in range(101):time.sleep(0.1)  # 模拟耗时操作self.progress.emit(i)self.finished.emit()

2. 自定义样式

PyQt5支持使用CSS样式来美化界面:

button = QPushButton('风格化按钮')
button.setStyleSheet("""QPushButton {background-color: #4CAF50;color: white;border-radius: 5px;padding: 10px 24px;font-size: 16px;}QPushButton:hover {background-color: #45a049;}
""")

3. 数据库集成

PyQt5提供了对SQL数据库的支持:

from PyQt5.QtSql import QSqlDatabase, QSqlQuery# 创建数据库连接
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('mydatabase.db')if db.open():query = QSqlQuery()query.exec_("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")

最佳实践

  1. 使用Qt Designer:对于复杂的UI,使用Qt Designer可视化设计工具可以大大提高开发效率。

  2. 分离逻辑和界面:遵循MVC(模型-视图-控制器)模式,将业务逻辑与界面代码分离。

  3. 合理使用信号和槽:避免创建过多的连接,这可能会影响性能。

  4. 错误处理:始终添加适当的错误处理,特别是在文件操作和网络请求中。

  5. 资源管理:确保正确释放资源,特别是在使用线程和数据库连接时。

  6. 国际化支持:如果应用程序需要多语言支持,从一开始就考虑使用Qt的国际化功能。

常见问题解决

1. 应用程序无响应

如果GUI冻结,通常是因为在主线程中执行了耗时操作。解决方案是使用QThread或QTimer。

2. 内存泄漏

确保正确管理对象的父子关系,Qt会自动删除具有父对象的子对象。

3. 布局问题

使用布局管理器而不是固定位置,这样可以确保应用程序在不同分辨率下都能正常显示。

学习资源

  • 官方文档:PyQt5官方文档
  • Qt文档:Qt官方文档
  • GitHub示例:搜索GitHub上的PyQt5项目
  • 在线教程:各种编程网站提供的PyQt5教程

总结

PyQt5是一个功能强大的GUI框架,提供了创建专业级桌面应用程序所需的所有工具。从简单的窗口到复杂的多线程应用,PyQt5都能够满足需求。

通过本文的介绍,你应该对PyQt5有了基本的了解,并能够开始创建自己的GUI应用程序。记住,实践是最好的学习方法,所以开始动手编写代码吧!

希望这篇博客对你有所帮助。如果你有任何问题或建议,欢迎在评论区留言讨论。祝你在PyQt5的学习之旅中取得成功!

相关文章:

PyQt5完整指南:从入门到实践

引言 PyQt5是Python编程语言的一个GUI(图形用户界面)工具包,它是Qt5应用程序框架的Python绑定。Qt是一个跨平台的C应用程序开发框架,被广泛用于开发GUI程序和非GUI程序。PyQt5让Python开发者能够使用Python语言享受到Qt框架的强大…...

C#高级编程:加密解密

在数字化时代,数据安全是每个应用程序都必须重视的环节。无论是用户的个人信息、敏感的商业数据,还是重要的系统配置,都需要得到妥善的保护。C# 作为一种广泛应用的编程语言,提供了丰富且强大的加密解密功能,帮助开发者构建安全可靠的应用。本文将深入探讨 C# 高级编程中的…...

银行卡真伪验证助力金融合规-银行卡实名认证接口

在数字化时代,金融交易日益频繁,用户身份与银行卡信息的真实性核验成为保障资金安全、防止欺诈行为的关键环节。无论是在线支付、网络借贷、电商平台,还是社交软件、金融服务APP,均需对用户的银行卡进行严格的实名认证。为满足企业…...

html5+css3实现傅里叶变换的动态展示效果(仅供参考)

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>傅里叶变换的动态展示效果</title><sty…...

SysConfig修改后`ti_msp_dl_config`文件未更新问题的解决方法(已解决)

SysConfig修改后ti_msp_dl_config文件未更新问题的解决方法 在使用SysConfig工具配置TI MSPM0系列MCU时&#xff0c;有时会遇到一个令人困惑的问题&#xff1a;在SysConfig中修改配置后&#xff0c;生成的ti_msp_dl_config.c文件内容却没有更新。这可能会导致工程无法正确编译…...

深入浅出 IPFS 在 DApps 和 NFT 中的应用:以 Pinata 实战为例

目录 IPFS背景什么是 IPFS?IPFS 在 DApps 与 NFT 中的作用什么是 Pinata?为什么使用它?使用原生IPFS上传下载文件(HTML + JavaScript 示例)使用Pinata上传下载文件(HTML + JavaScript 示例)注册并创建APIKey使用 Pinata 上传文件和JSON(HTML + JavaScript 示例)总结IP…...

深度剖析LLM的“大脑”:单层Transformer的思考模式探索

简单说一下哈 —— 咱们打算训练一个单层 Transformer 加上稀疏自编码器的小型百万参数大型语言模型&#xff08;LLM&#xff09;&#xff0c;然后去调试它的思考过程&#xff0c;看看这个 LLM 的思考和人类思考到底有多像。 LLMs 是怎么思考的呢&#xff1f; 开源 LLM 出现之后…...

(4)python开发经验

文章目录 1 使用ctypes库调用2 使用pybind11 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发 &#x1f448;&#x1f449;python开发 &#x1f448; 1 使用ctypes库调用 说明&#xff1a;ctypes是一个Python内置的库&#xff0c;可以提供C兼容的数据类型…...

卷积神经网络全连接层详解:特征汇总、FCN替代与性能影响分析

【内容摘要】 本文聚焦卷积神经网络&#xff08;CNN&#xff09;的全连接层&#xff0c;详细介绍其将二维特征图转化为一维向量的过程&#xff0c;阐述全卷积网络&#xff08;FCN&#xff09;如何通过转置卷积替代全连接层以实现像素级分类&#xff0c;并分析全连接层对图像分类…...

通义千问-langchain使用构建(一)

目录 序言通义千问1获取通义千问api_key2Conda构建下本地环境3 构建一下多轮对话 LangChain1使用Langchain调用通义千问接口实现翻译 结论 序言 25年5月&#xff0c;现在基本每个大厂都有涉及大模型(Large Language Model)&#xff0c;然后在大模型基础上构建应用框架。 参考…...

六西格玛觉醒:一场数据思维的启蒙运动​

​ 当生产线上的不良品率曲线第一次在我眼前具象化为统计波动图时&#xff0c;我意识到自己正站在新旧认知的断层带上。从对着MINITAB界面手足无措的菜鸟&#xff0c;到能独立完成过程能力分析的绿带学员&#xff0c;这段学习旅程不仅重塑了我的问题解决逻辑&#xff0c;更让我…...

BitMart合约交易体验 BitMart滑点全赔的底层逻辑

美国新泽西州泽西市&#xff0c;2025年5月13日 – BitMart&#xff0c;全球领先的数字资产交易平台&#xff0c;推出了其开创性的滑点保护计划&#xff0c;旨在解决加密市场中最具挑战性且常常被忽视的风险之一&#xff1a;滑点。该计划为交易者提供了在 USDT 保证金永续合约交…...

HCIP(BFD)

一、前言 随着网络应用的广泛部署,网络发生故障极大可能导致业务异常。为了减小链路、设备故障对业 务的影响,提高网络的可靠性,网络设备需要尽快检测到与相邻设备间的通信故障,以便及时采取措施,保证业务正常进行。BFD(Bidirectional Forwarding Detection,双向转发检测)提供…...

json-server的用法-基于 RESTful API 的本地 mock 服务

json-server 是一个非常方便的工具&#xff0c;用于快速搭建基于 RESTful API 的本地 mock 服务&#xff0c;特别适合前端开发阶段模拟后端数据接口。 &#x1f9e9; 一、安装 npm install -g json-server&#x1f680; 二、快速启动 创建一个 db.json 文件&#xff08;模拟数…...

化工单元操作试验装置系列产品JG-SX211计算机过程控制板框过滤操作实训装置

化工单元操作试验装置系列产品JG-SX211计算机过程控制板框过滤操作实训装置 一、装置功能 板框过滤岗位技能&#xff1a;板框过滤机的构造和操作方法&#xff1b;板框压滤机的操作&#xff08;装合、过滤、洗涤、卸渣、整理&#xff09;&#xff1b;洗涤速率与最终过滤速率的关…...

Linux 内核 IPv4 协议栈中的协议注册机制解析

1. 引言 在 Linux 内核的 IPv4 协议栈中,inetsw 是一个核心数据结构,负责管理不同套接字类型(如 SOCK_STREAM、SOCK_DGRAM)的协议实现。本文结合代码分析,深入探讨其设计原理、动态协议注册机制及并发安全实现。 2. inetsw 的结构与作用 2.1 定义与初始化 static struc…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-C. 常用SQL脚本模板

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 附录C. 常用SQL脚本模板速查表一、数据清洗与预处理模板二、数据聚合与分析模板三、窗口函数应用模板四、性能优化与监控模板五、数据备份与恢复模板六、权限管理与安全模板…...

Linux操作系统实战:中断源码的性能分析(转)

Linux中断是指在Linux操作系统中&#xff0c;当硬件设备或软件触发某个事件时&#xff0c;CPU会中断正在执行的任务&#xff0c;并立即处理这个事件。它是实现实时响应和处理外部事件的重要机制&#xff0c;Linux中断可以分为两种类型&#xff1a;硬件中断和软件中断&#xff0…...

Windows系统Anaconda/Miniconda的安装、配置、基础使用、清理缓存空间和Pycharm/VSCode配置指南

本文同步发布在个人博客&#xff1a; Windows系统Anaconda/Miniconda的安装、配置、基础使用、清理缓存空间和Pycharm/VSCode配置指南 - 萑澈的寒舍Conda 是一个开源的跨平台包管理与环境管理工具&#xff0c;广泛应用于数据科学、机器学习及 Python 开发领域。它不仅能帮助用…...

用HBuilder运行小程序到微信开发者工具

首先在HBuilder里配置微信开发者工具安装路径 “运行”--“运行到小程序模拟器”--“运行设置”--“微信开发者工具路径”...

基于网关实现不同网段S7-1200 CPU的通信方法

在工业自动化场景中&#xff0c;不同网段的S7-1200 PLC之间需要进行数据交换时&#xff0c;通常需要借助网关或路由设备实现跨网段通信。以下是几种常见的实现方法及详细配置步骤。 一、通信需求分析 当两个或多个S7-1200 PLC位于不同子网&#xff08;如192.168.1.0/24和192.1…...

微信小程序学习之轮播图swiper

轮播图是小程序的重要组件&#xff0c;我们还是好好学滴。 1、上代码&#xff0c;直接布局一个轮播图组件(index.wxml)&#xff1a; <swiper class"swiper" indicator-active-color"#fa2c19" indicator-color"#fff" duration"{{durati…...

零基础用 Hexo + Matery 搭建博客|Github Pages 免费部署教程

文章目录 一、Hexo1.1 依赖1.2 快速使用1.3 目录说明1.4 命令说明1.4.1 常规命令1.4.2 全局选项 二、主题安装2.1 安装 Matery 主题2.1.1 下载2.1.2 配置2.1.2.1 基础配置2.1.2.2 新建页面类型2.1.2.3 其他配置 2.2 其他主题推荐 三、部署3.1 部署到 Github Pages 四、总结 一、…...

Large-Scale Language Models: In-Depth Principles and Pioneering Innovations

大规模语言模型(Large-Scale Language Models, LLMs)是人工智能领域的璀璨明珠,深刻重塑了自然语言处理(NLP)并推动多模态应用的蓬勃发展。从BERT的语义洞察到GPT系列的生成奇迹,再到Grok、LLaMA等模型的跨界创新,LLMs在智能对话、代码生成、科学探索等领域展现出近乎人…...

微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)

一、系统介绍 本智能商城系统是基于当今主流技术栈开发的一款多端商城解决方案&#xff0c;主要包括微信小程序前端、SpringBoot 后端服务以及 Vue 管理后台三大部分。系统融合了线上商城的核心功能&#xff0c;支持商品浏览、下单、支付、订单管理等操作&#xff0c;适用于中小…...

命令行快速上传文件到SFTP服务器(附参考示例)

一、SFTP基础命令格式 更新参数后的标准命令格式为&#xff1a; sftp -P [端口号] [用户名][服务器IP]:[远程路径] <<< $put [本地文件路径]二、新参数实例解析 使用新连接参数的完整命令示例&#xff1a; sftp -P 30033 test_jigou_sftp121.199.64.216:/download…...

【Linux】第十六章 分析和存储日志

1. RHEL 日志文件保存在哪个目录中&#xff1f; 一般存储在 /var/log 目录中。 2. 什么是syslog消息和非syslog消息&#xff1f; syslog消息是一种标准的日志记录协议和格式&#xff0c;用于系统和应用程序记录日志信息。它规定了日志消息的结构和内容&#xff0c;包括消息的…...

vue2+ThinkPHP5实现简单大文件切片上传

使用 Vue 2 和 ThinkPHP 5 实现大文件切片上传功能 文章目录 一、前端(Vue 2)安装依赖文件上传并切片全部代码二、后端(ThinkPHP 5)完整代码一、前端(Vue 2) 安装依赖 安装spark-md5依赖 用于生成文件哈希,以便验证文件的完整性。 npm install spark-md5文件上传并切…...

phpstudy的Apache添加AddType application/x-httpd-php .php .php5配置无效的处理方式

前言 最近在学习安全竞赛ctf相关的内容&#xff0c;使用phpstudy作为服务端&#xff0c;研究图片上传相关漏洞的靶场upload-labs。其中遇到后缀名过滤&#xff0c;会过滤后缀名php。按照网上的处理方式&#xff0c;只需要在Apache服务器的配置文件中增加“AddType application…...

2025年Flutter项目管理技能要求

在2025年&#xff0c;随着Flutter技术的广泛应用和项目复杂度的提升&#xff0c;项目管理的重要性愈发凸显。Flutter项目管理不仅需要技术能力&#xff0c;还需要良好的沟通、协调、规划和执行能力。本文将详细探讨2025年Flutter项目管理应具备的技能要求&#xff0c;帮助项目管…...

Step1

项目 SchedulerSim 已搭建完成 ✅ ⸻ ✅ 你现在拥有的&#xff1a; • &#x1f527; 两种调度器&#xff08;Round Robin SJF&#xff09; • &#x1f4e6; 模拟进程类 Process • &#x1f9f1; 清晰结构&#xff1a;OOP 风格 便于扩展 • ✍️ 主函数已演示调度器运行效…...

MCP(一)——QuickStart

目录 1. MCP简介2. MCP的优势3. MCP核心4. QuickStart For Server Developers(仅具参考)4.1 MCP核心概念4.2 构建MCP服务器的代码4.2.1 设置MCP服务器实例4.2.2 辅助函数4.2.3 实现工具执行4.2.4 在Cherry-Studio中添加MCP服务器4.2.5 演示4.2.5.1 测试工具get_alerts4.2.5.2 测…...

NLP的基本流程概述

自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是计算机科学与人工智能领域中的一个重要分支&#xff0c;旨在使计算机能够理解、分析、生成和处理人类语言。NLP的基本流程通常包括以下几个关键步骤&#xff1a; 1. 文本预处理 (Text Preprocessing) …...

【Java学习笔记】==运算符

运算符 是一个比较运算符 既可以判断基本类型&#xff0c;又可以判断引用类型 如果判断基本类型&#xff0c;判断的是值是否相等&#xff0c;示例: int i 10; double d 10.0&#xff08;底层会发生自动类型转换&#xff09; 如果判断引用类型&#xff0c;判断的是地址是否相…...

移动网页调试工具实战:从 Chrome 到 WebDebugX 的效率演进

前端开发的日常&#xff0c;说白了就是构建、预览、调试的不断循环。如果是桌面浏览器&#xff0c;调试体验已经极致成熟&#xff1b;但一旦牵涉到移动端&#xff0c;尤其是 WebView 环境&#xff0c;一切都变得复杂。 过去几年里&#xff0c;我陆续试用了多个调试工具&#x…...

Vue 图片预览功能(含缩略图)

众所周知&#xff0c;常见的组件库如Element、Ant Design&#xff0c;自带的图片预览功能都没有缩略图&#xff0c;所以 需要单独封装一个图片预览的服务。 第三方库&#xff1a;v-viewer 安装&#xff1a; npm install v-viewer viewerjs 若使用报错&#xff0c;可安装指定…...

RK3588 串行解串板,支持8路GMSL相机

RK3588 支持的 GMSL 相机接入数量取决于所使用的解串板型号及配置方案&#xff1a; ‌xcDeserializer3.0 解串板‌ 可接入最多 ‌8 路 2M GMSL2 相机‌1。 ‌xcDeserializer4.0 解串板‌ 支持 ‌4 路 2M GMSL2 相机‌1。 ‌边缘计算盒解决方案‌ 部分商用方案可实现 ‌4 或 8…...

数据库字段唯一性修复指南:从设计缺陷到规范实现

数据库字段唯一性修复指南&#xff1a;从设计缺陷到规范实现 一、问题背景 表结构设计缺陷&#xff1a; sys_user 表未对 dingtalk_user_id&#xff08;钉钉用户ID&#xff09;字段设置唯一性约束&#xff0c;导致数据重复&#xff0c;引发以下问题&#xff1a; 系统稳定性风…...

深度学习Dropout实现

深度学习中的 Dropout 技术在代码层面上的实现通常非常直接。其核心思想是在训练过程中&#xff0c;对于网络中的每个神经元&#xff08;或者更精确地说&#xff0c;是每个神经元的输出&#xff09;&#xff0c;以一定的概率 p 随机将其输出置为 0。在反向传播时&#xff0c;这…...

IIS服务器URL重写配置完整教程

1.下载URL Rewrite Module 2.1 https://www.iis.net/downloads/microsoft/url-rewrite https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_zh-CN.msi 2.安装...

前后端分离博客 Weblog 项目实战

前后端分离博客 Weblog 项目实战&#xff1a;专栏介绍 - 犬小哈专栏 原文作者 http://116.62.199.48/ 功能模块 技术栈 必备环境 后端环境&#xff1a; JDK 1.8 版本&#xff08;此版本是目前企业中使用最广泛的&#xff09;;MySQL 5.7 版本 (或者 8.x 版本都可以&#…...

stm32 ADC单通道转换

stm32c8t6仅有12位分辨率 1、单次转换 非扫描 1、初始化 void Ad_Init() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//配置ADCCLK时钟分频,ADC的输入时钟不得超过14MHzRCC_ADCCLKConfig(RCC_PCLK2_Div6);G…...

万文c++继承

1、继承的概念与定义 1.1继承的概念 继承&#xff1a;是c代码复用的手段&#xff0c;允许在原有的基础上扩展&#xff0c;在此之前都是函数层次的复用&#xff0c;继承是类设计层次的复用。 下面有两个类Student和Teacher都有姓名/地址/电话/年龄等成员变量。都有identity身…...

记录一次git提交失败解决方案

问题显示: Push rejected: Push to origin/master was rejected 解决步骤: ‌拉取远程代码并合并‌ 先同步远程仓库的更新到本地&#xff0c;允许合并不相关历史记录&#xff1a; git pull origin master --allow-unrelated-histories 此操作会触发合并冲突解决流程&#xf…...

uni-app vue3版本打包h5后 页面跳转报错(uni[e] is not a function)

先看问题 解决方案 在HBuilderX项目中&#xff0c;若需在Web配置中显式关闭摇树优化&#xff08;Tree Shaking&#xff09;&#xff0c;可以通过以下步骤实现&#xff1a;首先&#xff0c;在配置中打开摇树优化&#xff0c;然后再将其关闭。这样操作后&#xff0c;配置文件中会…...

数字住建:助推智慧工地创新发展

近年来&#xff0c;国家和地方政府陆续出台了一系列政策措施&#xff0c;推动建筑业的智能化高质量发展。通过明确智慧工地的发展方向和目标定位&#xff0c;鼓励建筑业企业采用先进的信息化技术和管理模式&#xff0c;开展智能建造试点城市、资金扶持、税收优惠、智慧工地建设…...

libmemcached库api接口讲解二

我们来学一下怎么存数据 &#x1f4d8; libmemcached 数据写入函数详解&#xff08;set / add / replace&#xff09; ✅ 一、三个函数的作用与区别 函数作用key 存在时key 不存在时常见用途memcached_set()写入&#xff08;新增或覆盖&#xff09;✅ 覆盖✅ 创建默认推荐memc…...

【数据分析】从TCGA下载所有癌症的多组学数据

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包组学数据类型下载函数运行并行运行使用建议总结系统信息介绍 TCGA(The Cancer Genome Atlas)是一个庞大的癌症基因组数据库,包含多种癌症类型的多组学数据,如基因表达、…...

K8S redis 部署

在Kubernetes 1.26.14中部署Redis单实例/集群的步骤如下&#xff08;结合NFS持久化存储与认证配置&#xff09;&#xff1a; 一、部署Redis单实例&#xff08;StatefulSet模式&#xff09; 1. 创建配置文件 redis-statefulset.yaml # ConfigMap存储Redis配置 apiVersion: v1 …...

Android学习总结之kotlin篇(二)

扩展函数转成字节码的原理&#xff08;源码级别&#xff09; Kotlin 扩展函数在编译时会被转换为静态方法&#xff0c;这一过程涉及到以下几个关键步骤&#xff1a; 首先&#xff0c;Kotlin 编译器会为包含扩展函数的包生成一个特定的类。这个类的命名通常是基于包名和文件名的…...