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

Python-基于PyQt5,json和playsound的通用闹钟

前言:刚刚结束2024年秋季学期的学习,接下来我们继续来学习PyQt5。由于之前我们已经学习了PyQt5以及PyUIC,Pyrcc和QtDesigner的安装,配置。所以接下来我们一起深入PyQt5,学习如何利用PyQt5进行实际开发-基于PyQt5,json和playsound的通用闹钟。本次编程我们将会调用Python中的第三方库(如PyQt5playsound),大家需要提前下再好。此外我们也将会利用到Python的众多标准库实现整个程序的正常运行(如datetime,json,warning,sys等)。好,话不多说,我们直接开始今天的学习。

 第一步:导入库

我们需要sys,以便我们对PyCharm相关的操作和变量的访问。json,它提供了对JSON数据的编码和解码功能。接着我们导入标准库datetime。datetime类用于处理日期和时间(这个在后面的非重复,单日还是单周,月闹钟提醒设置里面非常重要),timedelta类用于表示时间间隔(这个为实现倒计时和设置计时功能提供了可能)。接下来是PyQt5的相关类和模块:QTimer类用于创建定时器;QTime类用于处理时间;QtWidgets模块包含了所有的GUI组件,如按钮、标签、文本框等;QIcon类用于创建图标。我们导入playsound函数用来播放音频文件(mp3格式的音频文件)。最后我们导入Python的标准库warnings来提供了对警告信息的控制(这里主要是我在后续调试代码过程中老是出现一些无关紧要的控制台警告,干脆保持静默得了)。

#导入必要库
import sys
import json
from datetime import datetime, timedelta
from PyQt5.QtCore import Qt, QTimer, QTime
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
from playsound import playsound
import warnings

第二步:静默警告信息(禁用部分函数)

采用忽略警告的方式静默警告。

warnings.filterwarnings("ignore", category=DeprecationWarning)

第三步:搭建环境并创建闹钟类

这里我们需要保证解释器安装有必要的Python环境:1,PyQt5,playsound等。2, 准备铃声文件:alarm.mp3(这里我给大家介绍一款可录屏,录音的免费软件ocam,我的mp3文件就是用ocam制作的)。3,准备图标文件:alarm.png(这个也需要大家自行准备,png格式的闹钟图片,示例如下)

#闹钟类
class AdvancedAlarmClock(QMainWindow):def __init__(self):super().__init__()self.alarms = []self.timers = []self.current_alarm = Noneself.snooze_time = 5self.initUI()self.load_alarms()def initUI(self):self.setWindowTitle('高级闹钟')self.setGeometry(300, 300, 216, 286)self.setWindowIcon(QIcon('alarm.png'))# 主控件main_widget = QWidget()self.setCentralWidget(main_widget)layout = QVBoxLayout()# 闹钟设置区域alarm_setting = QGroupBox("新建闹钟")alarm_layout = QHBoxLayout()self.time_edit = QTimeEdit()self.time_edit.setDisplayFormat("HH:mm")alarm_layout.addWidget(self.time_edit)self.repeat_combo = QComboBox()self.repeat_combo.addItems(["不重复", "每天", "工作日", "周末", "自定义..."])alarm_layout.addWidget(self.repeat_combo)self.sound_combo = QComboBox()self.sound_combo.addItems(["默认铃声", "铃声1", "铃声2"])alarm_layout.addWidget(self.sound_combo)add_btn = QPushButton("添加闹钟")add_btn.clicked.connect(self.add_alarm)alarm_layout.addWidget(add_btn)alarm_setting.setLayout(alarm_layout)layout.addWidget(alarm_setting)# 闹钟列表self.alarm_list = QListWidget()layout.addWidget(self.alarm_list)# 控制按钮control_layout = QHBoxLayout()del_btn = QPushButton("删除闹钟")del_btn.clicked.connect(self.delete_alarm)control_layout.addWidget(del_btn)snooze_btn = QPushButton("贪睡 (%d分钟)" % self.snooze_time)snooze_btn.clicked.connect(self.snooze_alarm)control_layout.addWidget(snooze_btn)layout.addLayout(control_layout)# 倒计时和计时器timer_group = QGroupBox("计时功能")timer_layout = QHBoxLayout()self.countdown_spin = QSpinBox()self.countdown_spin.setRange(1, 120)self.countdown_spin.setSuffix(" 分钟")timer_layout.addWidget(self.countdown_spin)countdown_btn = QPushButton("开始倒计时")countdown_btn.clicked.connect(self.start_countdown)timer_layout.addWidget(countdown_btn)self.timer_label = QLabel("00:00:00")timer_layout.addWidget(self.timer_label)timer_btn = QPushButton("启动计时器")timer_btn.clicked.connect(self.start_timer)timer_layout.addWidget(timer_btn)timer_group.setLayout(timer_layout)layout.addWidget(timer_group)main_widget.setLayout(layout)# 定时检查闹钟self.check_timer = QTimer()self.check_timer.timeout.connect(self.check_alarms)self.check_timer.start(1000)  # 每秒检查一次def add_alarm(self):alarm_time = self.time_edit.time().toString("HH:mm")repeat_mode = self.repeat_combo.currentText()sound = self.sound_combo.currentText()alarm = {"time": alarm_time,"repeat": repeat_mode,"sound": sound,"enabled": True}self.alarms.append(alarm)self.update_alarm_list()self.save_alarms()def delete_alarm(self):selected = self.alarm_list.currentRow()if selected >= 0:del self.alarms[selected]self.update_alarm_list()self.save_alarms()def update_alarm_list(self):self.alarm_list.clear()for alarm in self.alarms:status = "✓" if alarm["enabled"] else "✗"item = QListWidgetItem(f"{alarm['time']} | {alarm['repeat']} | {alarm['sound']} {status}")self.alarm_list.addItem(item)def check_alarms(self):now = datetime.now().strftime("%H:%M")for alarm in self.alarms:if alarm["enabled"] and alarm["time"] == now:self.trigger_alarm(alarm)def trigger_alarm(self, alarm):self.current_alarm = alarmalarm["enabled"] = False# 播放声音try:playsound('alarm.mp3')except:pass# 显示窗口msg = QMessageBox()msg.setWindowTitle("闹钟提醒")msg.setText(f"时间到!当前时间 {alarm['time']}")msg.setStandardButtons(QMessageBox.Ok)msg.exec_()self.update_alarm_list()self.save_alarms()def snooze_alarm(self):if self.current_alarm:snooze_time = datetime.now() + timedelta(minutes=self.snooze_time)self.alarms.append({"time": snooze_time.strftime("%H:%M"),"repeat": "不重复","sound": self.current_alarm["sound"],"enabled": True})self.update_alarm_list()self.save_alarms()def start_countdown(self):minutes = self.countdown_spin.value()end_time = datetime.now() + timedelta(minutes=minutes)timer = QTimer()timer.timeout.connect(lambda: self.update_countdown(timer, end_time))timer.start(1000)self.timers.append(timer)def update_countdown(self, timer, end_time):remaining = end_time - datetime.now()if remaining.total_seconds() <= 0:timer.stop()self.timer_label.setText("00:00:00")playsound('alarm.mp3')else:self.timer_label.setText(str(remaining).split('.')[0])def start_timer(self):self.timer_start_time = datetime.now()timer = QTimer()timer.timeout.connect(self.update_timer)timer.start(1000)self.timers.append(timer)def update_timer(self):elapsed = datetime.now() - self.timer_start_timeself.timer_label.setText(str(elapsed).split('.')[0])def save_alarms(self):with open("alarms.json", "w") as f:json.dump(self.alarms, f)def load_alarms(self):try:with open("alarms.json", "r") as f:self.alarms = json.load(f)self.update_alarm_list()except:pass

第四步:创建驱动单元

最后,我们将会用一个初始化单元来驱动整个程序运行。

​
#驱动单元
if __name__ == '__main__':app = QApplication(sys.argv)clock = AdvancedAlarmClock()clock.show()sys.exit(app.exec_())

第五步:完整代码展示

#导入必要库
import sys
import json
from datetime import datetime, timedelta
from PyQt5.QtCore import Qt, QTimer, QTime
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
from playsound import playsound
import warningswarnings.filterwarnings("ignore", category=DeprecationWarning)#闹钟类
class AdvancedAlarmClock(QMainWindow):def __init__(self):super().__init__()self.alarms = []self.timers = []self.current_alarm = Noneself.snooze_time = 5self.initUI()self.load_alarms()def initUI(self):self.setWindowTitle('高级闹钟')self.setGeometry(300, 300, 216, 286)self.setWindowIcon(QIcon('alarm.png'))# 主控件main_widget = QWidget()self.setCentralWidget(main_widget)layout = QVBoxLayout()# 闹钟设置区域alarm_setting = QGroupBox("新建闹钟")alarm_layout = QHBoxLayout()self.time_edit = QTimeEdit()self.time_edit.setDisplayFormat("HH:mm")alarm_layout.addWidget(self.time_edit)self.repeat_combo = QComboBox()self.repeat_combo.addItems(["不重复", "每天", "工作日", "周末", "自定义..."])alarm_layout.addWidget(self.repeat_combo)self.sound_combo = QComboBox()self.sound_combo.addItems(["默认铃声", "铃声1", "铃声2"])alarm_layout.addWidget(self.sound_combo)add_btn = QPushButton("添加闹钟")add_btn.clicked.connect(self.add_alarm)alarm_layout.addWidget(add_btn)alarm_setting.setLayout(alarm_layout)layout.addWidget(alarm_setting)# 闹钟列表self.alarm_list = QListWidget()layout.addWidget(self.alarm_list)# 控制按钮control_layout = QHBoxLayout()del_btn = QPushButton("删除闹钟")del_btn.clicked.connect(self.delete_alarm)control_layout.addWidget(del_btn)snooze_btn = QPushButton("贪睡 (%d分钟)" % self.snooze_time)snooze_btn.clicked.connect(self.snooze_alarm)control_layout.addWidget(snooze_btn)layout.addLayout(control_layout)# 倒计时和计时器timer_group = QGroupBox("计时功能")timer_layout = QHBoxLayout()self.countdown_spin = QSpinBox()self.countdown_spin.setRange(1, 120)self.countdown_spin.setSuffix(" 分钟")timer_layout.addWidget(self.countdown_spin)countdown_btn = QPushButton("开始倒计时")countdown_btn.clicked.connect(self.start_countdown)timer_layout.addWidget(countdown_btn)self.timer_label = QLabel("00:00:00")timer_layout.addWidget(self.timer_label)timer_btn = QPushButton("启动计时器")timer_btn.clicked.connect(self.start_timer)timer_layout.addWidget(timer_btn)timer_group.setLayout(timer_layout)layout.addWidget(timer_group)main_widget.setLayout(layout)# 定时检查闹钟self.check_timer = QTimer()self.check_timer.timeout.connect(self.check_alarms)self.check_timer.start(1000)  # 每秒检查一次def add_alarm(self):alarm_time = self.time_edit.time().toString("HH:mm")repeat_mode = self.repeat_combo.currentText()sound = self.sound_combo.currentText()alarm = {"time": alarm_time,"repeat": repeat_mode,"sound": sound,"enabled": True}self.alarms.append(alarm)self.update_alarm_list()self.save_alarms()def delete_alarm(self):selected = self.alarm_list.currentRow()if selected >= 0:del self.alarms[selected]self.update_alarm_list()self.save_alarms()def update_alarm_list(self):self.alarm_list.clear()for alarm in self.alarms:status = "✓" if alarm["enabled"] else "✗"item = QListWidgetItem(f"{alarm['time']} | {alarm['repeat']} | {alarm['sound']} {status}")self.alarm_list.addItem(item)def check_alarms(self):now = datetime.now().strftime("%H:%M")for alarm in self.alarms:if alarm["enabled"] and alarm["time"] == now:self.trigger_alarm(alarm)def trigger_alarm(self, alarm):self.current_alarm = alarmalarm["enabled"] = False# 播放声音try:playsound('alarm.mp3')except:pass# 显示窗口msg = QMessageBox()msg.setWindowTitle("闹钟提醒")msg.setText(f"时间到!当前时间 {alarm['time']}")msg.setStandardButtons(QMessageBox.Ok)msg.exec_()self.update_alarm_list()self.save_alarms()def snooze_alarm(self):if self.current_alarm:snooze_time = datetime.now() + timedelta(minutes=self.snooze_time)self.alarms.append({"time": snooze_time.strftime("%H:%M"),"repeat": "不重复","sound": self.current_alarm["sound"],"enabled": True})self.update_alarm_list()self.save_alarms()def start_countdown(self):minutes = self.countdown_spin.value()end_time = datetime.now() + timedelta(minutes=minutes)timer = QTimer()timer.timeout.connect(lambda: self.update_countdown(timer, end_time))timer.start(1000)self.timers.append(timer)def update_countdown(self, timer, end_time):remaining = end_time - datetime.now()if remaining.total_seconds() <= 0:timer.stop()self.timer_label.setText("00:00:00")playsound('alarm.mp3')else:self.timer_label.setText(str(remaining).split('.')[0])def start_timer(self):self.timer_start_time = datetime.now()timer = QTimer()timer.timeout.connect(self.update_timer)timer.start(1000)self.timers.append(timer)def update_timer(self):elapsed = datetime.now() - self.timer_start_timeself.timer_label.setText(str(elapsed).split('.')[0])def save_alarms(self):with open("alarms.json", "w") as f:json.dump(self.alarms, f)def load_alarms(self):try:with open("alarms.json", "r") as f:self.alarms = json.load(f)self.update_alarm_list()except:pass#驱动单元
if __name__ == '__main__':app = QApplication(sys.argv)clock = AdvancedAlarmClock()clock.show()sys.exit(app.exec_())

 第六步:操作指南 

1.设置新闹钟:
     - 选择时间
     - 设置重复模式
     - 选择铃声
     - 点击"添加闹钟" 
2.管理闹钟:
     - 双击列表项启用/禁用
     - 选择后点击"删除闹钟"
     - 响铃时点击"贪睡"延迟提醒
 3.计时工具**:
     - 倒计时:设置分钟数 → 开始倒计时
     - 秒表:直接启动计时器

第七步:运行效果展示

正常状态:

最大化:

最小化:

相关文章:

Python-基于PyQt5,json和playsound的通用闹钟

前言&#xff1a;刚刚结束2024年秋季学期的学习&#xff0c;接下来我们继续来学习PyQt5。由于之前我们已经学习了PyQt5以及PyUIC,Pyrcc和QtDesigner的安装&#xff0c;配置。所以接下来我们一起深入PyQt5&#xff0c;学习如何利用PyQt5进行实际开发-基于PyQt5&#xff0c;json和…...

51单片机开发:定时器中断

目标&#xff1a;利用定时器中断&#xff0c;每隔1s开启/熄灭LED1灯。 外部中断结构图如下图所示&#xff0c;要使用定时器中断T0&#xff0c;须开启TE0、ET0。&#xff1a; 系统中断号如下图所示&#xff1a;定时器0的中断号为1。 定时器0的工作方式1原理图如下图所示&#x…...

循序渐进kubernetes-RBAC(Role-Based Access Control)

文章目录 概要Kubernetes API了解 Kubernetes 中的 RBACRoles and Role Bindings:ClusterRoles and ClusterRoleBindings检查访问权限&#xff1a;外部用户结论 概要 Kubernetes 是容器化应用的强大引擎&#xff0c;但仅仅关注部署和扩展远远不够&#xff0c;集群的安全同样至…...

在Scene里面绘制编辑工具

功能要求 策划要在scene模式下编辑棋子摆放。用handle.GUI绘制来解决了。 问题 在scene模式下编辑产生的数据&#xff0c;进入游戏模式后就全不见了。改为executeAlways也没用。我的解决办法是把编辑数据序列化保存到本地。在OnEnable的时候再读取。但是我忽然想到&#xff…...

深入探索 Vue 3 Markdown 编辑器:高级功能与实现

目录 1. 为什么选择 Markdown 编辑器&#xff1f;2. 选择合适的 Markdown 编辑器3. 安装与基本配置安装 配置 Markdown 编辑器代码说明 4. 高级功能实现4.1 实时预览与双向绑定4.2 插入图片和图像上传安装图像上传插件配置图像上传插件 4.3 数学公式支持安装 KaTeX配置 KaTeX 插…...

动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践

利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实标签,却要推断出其余所有节点的标签,这属于归纳式学…...

具身智能研究报告

参考&#xff1a; &#xff08;1&#xff09;GTC大会&Figure&#xff1a;“具身智能”奇点已至 &#xff08;2&#xff09;2024中国具身智能创投报告 &#xff08;3&#xff09;2024年具身智能产业发展研究报告 &#xff08;4&#xff09;具身智能行业深度&#xff1a;发展…...

LabVIEW春节快乐

尊敬的LabVIEW开发者与用户朋友们&#xff1a; 灵蛇舞动辞旧岁&#xff0c;春风送暖贺新年&#xff01;值此癸巳蛇年新春佳节来临之际&#xff0c;向每一位深耕LabVIEW开发领域的伙伴致以最诚挚的祝福&#xff1a;愿您与家人在新的一年里平安顺遂、阖家幸福&#xff0c;事业如…...

MybatisX插件快速创建项目

一、安装插件 二、创建一个数据表测试 三、IDEA连接Mysql数据库 四、选择MybatiX构造器 五、配置参数 六、项目结构...

技术周总结 01.13~01.19 周日(Spring Visual Studio git)

文章目录 一、01.14 周二1.1&#xff09;问题01&#xff1a;Spring的org.springframework.statemachine.StateMachine 是什么&#xff0c;怎么使用&#xff1f;:如何使用StateMachine&#xff1a; 1.2&#xff09;问题02&#xff1a;Spring StateMachine 提供了一系列高级特性 …...

【C++】List的模拟实现

文章目录 1.ListNode 结构体2.List成员变量与typedef3.迭代器iterator4.begin()、end()、size()、empty()、构造函数5. insert()、erase()6.push_back()、pop_back()、push_front()、pop_front()7.拷贝构造、赋值、析构8.总代码 以后有时间会更新其它成员函数 1.ListNode 结构…...

剑指 Offer II 002. 二进制加法

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20002.%20%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8A%A0%E6%B3%95/README.md 剑指 Offer II 002. 二进制加法 题目描述 给定两个 01 字符串 a 和 b &#xff0c;请计算…...

(15)基于状态方程的单相自耦变压器建模仿真

1. 引言 2. 单相降压自耦变压器的状态方程 3. 单相降压自耦变压器的simulink仿真模型 4. 实例仿真 5. 总结 1. 引言 自耦变压器的原边和副边之间存在直接的电气连接,所以功率是通过感应和传导从原边转移到副边的,这与双绕组变压器不同,后者的原边和副边是电气隔离的。从…...

03.01、三合一

03.01、[简单] 三合一 1、题目描述 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标&#xff0c;value表示压入的值。 构造函数会传入一个stackSize参数&#xf…...

.git/hooks/post-merge 文件的作用

.git/hooks/post-merge 文件是 Git 版本控制系统中的一个钩子&#xff08;hook&#xff09;脚本&#xff0c;其作用是在合并&#xff08;merge&#xff09;操作完成后自动执行一些特定的操作。以下是关于 .git/hooks/post-merge 文件作用的详细解释&#xff1a; 作用 自动化任…...

SpringBoot项目创建

一、创建新的工程 二、配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…...

评估训练模型所需的算力

1.模型规模(核心因素) 1.1 参数量决定算力下限: 10亿参数模型:需约1-10 PetaFLOP/s-days(等效1万亿次浮点运算持续1天) 千亿参数(如GPT-3):约3,000-5,000 PetaFLOP/s-days 万亿参数模型:超过50,000 PetaFLOP/s-days 1.2 显存需求公式: 显存(GB) ≈ (参数量 20 by…...

Tez 0.10.1安装

个人博客地址&#xff1a;Tez 0.10.1安装 | 一张假钞的真实世界 具体安装步骤参照官网安装手册即可。此处只对官网手册进行补充。 从官网下载apache-tez-0.10.1-bin.tar.gz进行安装未成功&#xff0c;出现下面的异常。最终按照官网源代码编译的方式安装测试成功。 环境 Had…...

代码随想录算法训练营第三十八天-动态规划-完全背包-139.单词拆分

类似于回溯算法中的拆分回文串题目是要求拆分字符串&#xff0c;问这些字符串是否出现在字典里。但这道题可以反着来考虑&#xff0c;从字典中的单词能不能组成所给定的字符串 如果这样考虑&#xff0c; 这个字符串就背包&#xff0c;容器字典中的单词就是一个一个物品问题就转…...

selenium clear()方法清除文本框内容

在使用Selenium进行Web自动化测试时&#xff0c;清除文本框内容是一个常见的需求。这可以通过多种方式实现&#xff0c;取决于你使用的是哪种编程语言&#xff08;如Python、Java等&#xff09;以及你的具体需求。以下是一些常见的方法&#xff1a; 1. 使用clear()方法 clear…...

新增文章功能

总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程&#xff0c;springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 之前又偷懒几天。回老家没事干&#xff0c;玩也玩不好&#xff0c;一玩老是被家里人说。写代码吧还是&#xff0c;他们都看不懂&a…...

【设计测试用例自动化测试性能测试 实战篇】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 设计测试用例…...

【算法与数据结构】动态规划

目录 基本概念 最长递增子序列&#xff08;中等&#xff09; 最大子数组和&#xff08;中等&#xff09; 基本概念 重叠子问题 一个问题可以被分解为多个子问题&#xff0c;并且这些子问题在求解过程中会被多次重复计算。例如&#xff0c;在计算斐波那契数列时&#xff0c;…...

扣子平台音频功能:让声音也能“智能”起来。扣子免费系列教程(14)

在数字化时代&#xff0c;音频内容的重要性不言而喻。无论是在线课程、有声读物&#xff0c;还是各种多媒体应用&#xff0c;音频都是传递信息、增强体验的关键元素。扣子平台的音频功能&#xff0c;为开发者和内容创作者提供了一个强大而灵活的工具&#xff0c;让音频的使用和…...

【CS61A 2024秋】Python入门课,全过程记录P4(Week7 Generators开始,更新于2025/1/29)

文章目录 关于基本介绍&#x1f44b;新的问题更好的解决方案Week7Mon Generators阅读材料Lab 05: Iterators, MutabilityQ1: WWPD: List-MutationQ2: Insert Items 关于 个人博客&#xff0c;里面偶尔更新&#xff0c;最近比较忙。发一些总结的帖子和思考。 江湖有缘相见&…...

JUC--ConcurrentHashMap底层原理

ConcurrentHashMap底层原理 ConcurrentHashMapJDK1.7底层结构线程安全底层具体实现 JDK1.8底层结构线程安全底层具体实现 总结JDK 1.7 和 JDK 1.8实现有什么不同&#xff1f;ConcurrentHashMap 中的 CAS 应用 ConcurrentHashMap ConcurrentHashMap 是一种线程安全的高效Map集合…...

【Linux网络编程】网络层说明

目录 前言&#xff1a; 1&#xff0c;网络层介绍 2&#xff0c;IP协议 3&#xff0c;IP协议的格式 4&#xff0c;网段划分 5&#xff0c;特殊的IP地址 6&#xff0c;私有IP地址和公网IP地址 前言&#xff1a; 网络层对于程序员来说不太重要&#xff0c;这方面知识大致了…...

002-基于Halcon的图像几何变换

本节将简要介绍Halcon中有关图像几何变换的基本算子及其应用&#xff0c;主要涉及五种常见的二维几何变换形式&#xff1a;平移、镜像、旋转、错切和放缩。这几种变换可归结为一类更高级更抽象的空间变换类型&#xff0c;即仿射变换&#xff08;Affine transformation&#xff…...

unity学习22:Application类其他功能

目录 1 是否允许后台运行 1.1 Application.runInBackground&#xff0c;显示是否允许后台运行 1.2 设置的地方 2 打开URL 2.1 Application.OpenURL("") 打开超链接 3 退出游戏 3.1 Application.Quit() 退出游戏 4 场景相关 5 返回游戏状态 6 控制游戏的行…...

配置cursor进行Java springboot项目开发

本文用于记录如何配置cursor进行Java SpringBoot项目开发&#xff0c;因为项目团队同事基本都是在使用idea开发工具&#xff0c;所以在尝试cursor新ide的时候发现还是有一些小坑要处理一下的。 首先为了后续在多个不同的java项目之间进行切换的时候不想翻来覆去的总配置指定jdk…...

ChirpIoT技术的优势以及局限性

ChirpIoT是一种由上海磐启微电子开发的国产无线射频通讯技术&#xff0c;ChirpIoT技术基于磐启多年对雷达等线性扩频信号的深入研究&#xff0c;并在此基础上对线性扩频信号的变化进行了改进&#xff0c;实现了远距离传输的一种无线通信技术。相关产品型号有E29-400T22D、E290-…...

ODP(OBProxy)路由初探

OBProxy路由策略 Primary Zone 路由 官方声明默认情况&#xff0c;会将租户请求发送到租户的 primary zone 所在的机器上&#xff0c;通过 Primary Zone 路由可以尽量发往主副本&#xff0c;方便快速寻找 Leader 副本。另外&#xff0c;设置primary zone 也会在一定成都上减少…...

【25考研】人大计算机考研复试该怎么准备?有哪些注意事项?

人大毕竟是老牌985&#xff0c;复试难度不会太低&#xff01;建议同学认真复习&#xff01;没有机试还是轻松一些的&#xff01; 一、复试内容 由公告可见&#xff0c;复试包含笔试及面试&#xff0c;没有机试&#xff01; 二、参考书目 官方无给出参考书目&#xff0c;可参照…...

阿里云域名备案

一、下载阿里云App 手机应用商店搜索"阿里云",点击安装。 二、登录阿里云账号 三、打开"ICP备案" 点击"运维"页面的"ICP备案"。 四、点击"新增网站/App" 若无备案信息,则先新增备案信息。 五、开始备案...

实现基础的shell程序

1. 实现一个基础的 shell 程序&#xff0c;主要完成两个命令的功能 cp 和 ls 1.1.1. cp 命令主要实现&#xff1a; ⽂件复制⽬录复制 1.1.2. ls 命令主要实现&#xff1a; ls -l 命令的功能 1.1. 在框架设计上&#xff0c;采⽤模块化设计思想&#xff0c;并具备⼀定的可扩…...

yolov5错误更改与相关参数详解(train.py)

1.错误更改 main中相关参数 if __name__ __main__:parser argparse.ArgumentParser()parser.add_argument(--weights, typestr, default, helpinitial weights path)parser.add_argument(--cfg, typestr, defaultmodels/yolov5s.yaml, helpmodel.yaml path)parser.add_arg…...

(详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源

文章目录 Springboot 整合多动态数据源 这里有mysql&#xff08;分为master 和 slave&#xff09; 和oracle1. 引入相关的依赖2. 创建相关配置文件3. 在相关目录下进行编码&#xff0c;不同路径会使用不同数据源 Springboot 整合多动态数据源 这里有mysql&#xff08;分为maste…...

20.Word:小谢-病毒知识的科普文章❗【38】

目录 题目​ NO1.2.3文档格式 NO4.5 NO6.7目录/图表目录/书目 NO8.9.10 NO11索引 NO12.13.14 每一步操作完&#xff0c;确定之后记得保存最后所有操作完记得再次删除空行 题目 NO1.2.3文档格式 样式的应用 选中应用段落段落→开始→选择→→检查→应用一个一个应用ctr…...

arkui-x跨平台与android java联合开发

华为鸿蒙系统采用的是arkts&#xff0c;支持跨平台crossplatform 即前端为arkts&#xff0c;arkui-x框架&#xff0c;后端为其他的语言框架。 本篇示例后端采用的是java&#xff0c;android studio工程。 主要方式是前端鸿蒙完成界面元素、布局等效果&#xff0c;后面androi…...

G. Rudolf and CodeVid-23

题目链接&#xff1a;Problem - G - Codeforces 题目大意&#xff1a; 一种病有 n≤10 种症状。 一种病情可以用一个长度为 n 的01 串表示&#xff0c;其中第 i 个字符表示是否出现该种症状。 现有 m(∑m≤103) 种药&#xff0c;每种药用两个无交集的 01 串表示。第一个 01…...

基于STM32的智能宠物喂食器设计

目录 引言系统设计 硬件设计软件设计 系统功能模块 定时喂食模块远程控制与视频监控模块食物存量检测与报警模块语音互动与用户交互模块数据记录与智能分析模块 控制算法 定时与手动投喂算法食物存量检测与低存量提醒算法数据记录与远程反馈算法 代码实现 喂食控制代码存量检测…...

css中的animation

css的animation animation是一个综合属性,是animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, animation-play-state, and animation-timeline这些属性的简写 不过在…...

[内网安全] 内网渗透 - 学习手册

这是一篇专栏的目录文档&#xff0c;方便读者系统性的学习&#xff0c;笔者后续会持续更新文档内容。 如果没有特殊情况的话&#xff0c;大概是一天两篇的速度。&#xff08;实验多或者节假日&#xff0c;可能会放缓&#xff09; 笔者也是一边学习一边记录笔记&#xff0c;如果…...

VMware 中Ubuntu无网络连接/无网络标识解决方法【已解决】

参考文档 Ubuntu无网络连接/无网络标识解决方法_ubuntu没网-CSDN博客 再我们正常使用VMware时&#xff0c;就以Ubuntu举例可能有时候出现无网络连接&#xff0c;甚至出现无网络标识的情况&#xff0c;那么废话不多说直接上教程 环境&#xff1a;无网络 解决方案&#…...

区块链在能源行业的创新

技术创新 1. 智能合约与自动化交易 智能合约是区块链技术的核心组件之一&#xff0c;它允许在没有中介的情况下自动执行合同条款。在能源行业&#xff0c;这可以用于自动化电力交易、支付流程以及管理复杂的供应链。例如&#xff0c;当太阳能板产生的电量达到预设值时&#x…...

skynet 源码阅读 -- 核心概念服务 skynet_context

本文从 Skynet 源码层面深入解读 服务&#xff08;Service&#xff09; 的创建流程。从最基础的概念出发&#xff0c;逐步深入 skynet_context_new 函数、相关数据结构&#xff08;skynet_context, skynet_module, message_queue 等&#xff09;&#xff0c;并通过流程图、结构…...

前端react后端java实现提交antd form表单成功即导出压缩包

前端&#xff08;React Ant Design&#xff09; 1. 创建表单&#xff1a;使用<Form>组件来创建你的表单。 2. 处理表单提交&#xff1a;在onFinish回调中发起请求到后端API&#xff0c;并处理响应。 import React from react; import { Form, Input, Button } from ant…...

2025 = 1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 + 9^3

【算法代码】 #include <bits/stdc.h> using namespace std;int year2025; int main() {cout<<year<<" ";int i1;while(year) {cout<<i<<"^3";if(i<9) cout<<" ";year-pow(i,3);i;}return 0; }/* 202…...

程序代码篇---C++常量引用

文章目录 前言第一部分&#xff1a;C常量常量变量const与指针1.指向常量的指针2.常量指针3.指向常量的常量指针 常量成员函数const_cast运算符总结 第二部分&#xff1a;C引用引用的基本概念引用的声明引用的使用引用的特性1.不可变性2.无需解引用3.内存地址 引用的用途1.函数参…...

DeepSeek-R1本地部署笔记

文章目录 效果概要下载 ollama终端下载模型【可选】浏览器插件 UIQ: 内存占用高&#xff0c;显存占用不高&#xff0c;正常吗 效果 我的配置如下 E5 2666 V3 AMD 590Gme 可以说是慢的一批了&#xff0c;内存和显卡都太垃圾了&#xff0c;回去用我的新设备再试试 概要 安装…...