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

PyQt5事件机制解析:从原理到实战一网打尽!

PyQt5事件机制

    • 一、简介
      • 1.1 PyQt5的概述和作用
    • 1.2 为什么学习PyQt5事件机制
        • 1.2.1 实现用户交互
        • 1.2.2 处理复杂逻辑
        • 1.2.3 自定义用户界面行为
        • 1.2.4 优化性能
    • 二、PyQt5事件机制初步了解
      • 2.1 PyQt5事件的概念和基本原理
        • 2.1.1 PyQt5事件的概念
        • 2.1.2 PyQt5事件的基本原理
      • 2.2 事件处理的基本流程
        • 2.2.1 事件的分发
        • 2.2.2 事件的接收
        • 2.2.3 事件的处理
      • 2.3 事件处理器的注册和处理
        • 2.3.1 事件处理器的注册
        • 2.3.2 事件处理器的处理
    • 三、PyQt5事件机制深入分析
      • 3.1 了解PyQt5中的事件类型
      • 3.2 事件过滤器的使用
      • 3.3 事件的冒泡和捕获机制
    • 四、PyQt5事件机制的实战演练
      • 4.1 创建一个基本的PyQt5应用程序
      • 4.2 实现一些常见的事件处理
      • 4.3 演示事件过滤器的功能和使用方法
    • 五、结语
      • 5.1 总结PyQt5事件机制的重要性
      • 5.2 可能的扩展和深入学习方向

一、简介

1.1 PyQt5的概述和作用

PyQt5是一个用于开发图形用户界面的Python库,它是基于Qt框架的Python绑定。Qt是一个跨平台的应用程序框架,为开发者提供了丰富的工具和组件,可以用于构建高效、漂亮和功能强大的GUI应用程序。PyQt5作为Qt的Python绑定,提供了完整的Qt功能,并能够与Python语言无缝集成。

PyQt5的主要作用是为开发者提供了丰富的GUI组件和工具,使开发者能够快速而简便地创建跨平台的图形用户界面应用程序。它支持主流的操作系统,包括Windows、Linux和macOS,并且可以与主要的Python版本兼容,如Python 2.7和Python 3.x。

1.2 为什么学习PyQt5事件机制

事件机制是PyQt5的核心概念之一,学习并掌握事件机制对于开发GUI应用程序至关重要。在PyQt5中,事件机制用于处理用户与应用程序之间的交互,例如鼠标点击、键盘输入等操作。了解事件机制的原理和使用方法,可以使开发者更好地理解和控制应用程序的行为,增强用户体验。

1.2.1 实现用户交互

在图形用户界面应用程序中,用户交互是非常重要的。通过了解和利用PyQt5的事件机制,开发者能够轻松响应用户的操作和输入,例如点击按钮、选择菜单项等。这可以使程序更加交互性,提升用户体验。

1.2.2 处理复杂逻辑

在一些应用程序中,可能需要处理复杂的逻辑和业务流程。PyQt5的事件机制可以帮助开发者将整个应用程序拆分为多个事件处理函数,使得代码结构更加清晰和易于维护。通过合理利用事件机制,可以将复杂的逻辑分解为多个独立的事件处理函数,提高代码的可读性和可维护性。

1.2.3 自定义用户界面行为

PyQt5的事件机制允许开发者自定义用户界面的行为。通过重写和扩展事件处理函数,可以对控件的默认行为进行修改,实现自定义的交互效果。这为开发者提供了很大的灵活性和创造空间。

1.2.4 优化性能

PyQt5的事件机制还可以帮助开发者优化应用程序的性能。通过合理地处理和过滤事件,可以避免不必要的计算和操作,提高应用程序的响应速度。此外,PyQt5还提供了信号和槽机制,可以将事件和信号关联起来,实现更加高效的事件处理。

二、PyQt5事件机制初步了解

PyQt5是Python的一个GUI工具包,它是使用C++编写的Qt GUI库的Python绑定。PyQt5提供了GUI开发所需的所有基础组件和事件处理机制,以及丰富的展示和交互特效等功能。

2.1 PyQt5事件的概念和基本原理

2.1.1 PyQt5事件的概念

PyQt5中的事件是指在程序运行过程中,由系统或用户所产生的某种动作或信号。例如鼠标点击、键盘按键、窗口大小改变等。当这些事件发生时,它们会被封装成事件对象,然后通过Qt的事件分发系统传递给相应的对象进行处理。

2.1.2 PyQt5事件的基本原理

PyQt5中的事件处理是基于信号和槽机制的。在Qt中,每个QObject派生的类都有信号和槽机制。一个QObject可能会发出一个信号,其他的QObject则会接收到这个信号,然后触发一些操作。这种机制的实现是基于Qt的元对象系统,它会自动为QObject派生的类创建一个元对象,在程序运行时,使用元对象系统来管理成员函数的调用。

2.2 事件处理的基本流程

PyQt5所使用的事件处理机制包括三个基本操作:事件的分发、事件的接收和事件的处理。

2.2.1 事件的分发

PyQt5中所有的事件都是由 QApplication 事件分发系统分发的。QApplication 继承自QCoreApplication,它负责在消息循环中处理各种事件。

2.2.2 事件的接收

当一个事件分发时,Qt在对象树中自上而下查找适合处理这个事件的对象,这个对象就是事件接收者。事件接收者的查找是根据事件传递构造的。在事件接收者中,Qt通过查找是否存在处理这个事件的槽函数,并将事件派遣到对应的槽函数中处理。

2.2.3 事件的处理

在事件接收者对象得到事件后,它会根据注册的事件处理器(槽函数)进行事件处理。事件处理是通过QObject的connect()语法实现的,该语法用于建立信号和槽之间的联系。例如:

btn = QPushButton("Click me")
btn.clicked.connect(self.btn_clicked)

上述代码建立了QPushButton类的clicked信号与相应的处理函数btn_clicked()之间的联系,当用户单击按钮时,就会检查是否与该信号相关联的槽函数存在,并调用信号所对应的槽函数进行事件处理。

2.3 事件处理器的注册和处理

事件处理器是用于处理特定事件的槽函数。当一个对象需要对某个事件进行处理时,需要对该对象进行事件处理器的注册。

2.3.1 事件处理器的注册

在PyQt5中,事件处理器的注册是通过 connect() 语法实现的。该语法用于建立信号和槽之间的联系。当一个事件发生时,会调用相应的信号,然后触发槽函数进行事件处理。

senderObject.signal.connect(receiverObject.slot)

其中 senderObject 是发送信号的对象,signal 是信号,receiverObject 是接收信号的对象,slot 是槽函数。例如:

btn = QPushButton("Click me")
btn.clicked.connect(self.btn_clicked)

上述代码将QPushButton类的clicked信号以及相应的处理函数btn_clicked()之间建立了联系。

2.3.2 事件处理器的处理

一旦发生某个事件并触发了槽函数,槽函数就会开始事件的处理过程。在事件处理器函数中,可以通过AI算法对事件进行具体的处理,包括计算、识别、分类等。

例如,判断按钮是否被单击:

def btn_clicked(self):if sender() == self.btn:print("Button clicked")

上述代码使用了sender()函数获取了发送信号的对象,然后判断是否与按钮相同,如果是,则输出“Button clicked”。

三、PyQt5事件机制深入分析

3.1 了解PyQt5中的事件类型

在PyQt5中,事件是指发生在应用程序中的各种动作,比如点击按钮、键盘输入等。PyQt5通过事件类型来定义不同的事件,这些事件类型包括鼠标点击事件、键盘按键事件、定时器事件等。了解不同事件类型的特点和使用方法对于开发PyQt5应用程序至关重要。

PyQt5中常见的事件类型包括:

  • 鼠标事件:包括点击、双击、移动、滚轮等鼠标操作。
  • 键盘事件:指用户在键盘上的按键操作,比如按下、释放等。
  • 定时器事件:定时器事件是指在一定时间间隔触发的事件,常用于实现定时刷新等功能。
# 这里插入鼠标事件的示例代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtCore import Qtclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 280, 170)self.setWindowTitle('Event handler')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawPoints(qp)qp.end()def drawPoints(self, qp):qp.setPen(Qt.red)qp.drawPoint(100, 100)def mousePressEvent(self, e):self.update()app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

3.2 事件过滤器的使用

PyQt5通过事件过滤器提供了一种灵活的方式来过滤和处理事件。事件过滤器允许开发者对特定的控件或应用程序全局事件进行拦截和处理,从而实现各种自定义的功能。

通过事件过滤器,可以实现诸如监控鼠标移动、自定义按键处理、事件拦截等功能。事件过滤器的使用为PyQt5应用程序的定制和功能扩展提供了可能性。

# 这里插入事件过滤器的示例代码
import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, QApplication)
from PyQt5.QtCore import QEventclass Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)def event(self, event):if event.type() == QEvent.HoverEnter:print('鼠标悬停')return Truereturn super().event(event)class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.button = Button('Button', self)self.button.move(50, 50)self.setGeometry(300, 300, 280, 170)self.setWindowTitle('Event filter')self.show()app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

3.3 事件的冒泡和捕获机制

事件的冒泡和捕获机制是指事件在控件层级结构中的传递和处理方式。在PyQt5中,事件的传递顺序可以是从顶层控件向下层传递(捕获),也可以是从下层控件向顶层传递(冒泡)。

掌握事件的冒泡和捕获机制有助于有效地处理事件传递过程中的冲突和重复处理问题。通过深入了解事件的冒泡和捕获机制,开发者可以更加灵活地设计和组织控件,并实现复杂的交互功能。

四、PyQt5事件机制的实战演练

4.1 创建一个基本的PyQt5应用程序

在PyQt5中,事件处理是一个非常重要的部分,通过事件处理能够响应用户输入和操作,为了演示PyQt5事件机制的实际应用,我们首先来创建一个基本的PyQt5应用程序。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButtonclass BasicApp(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('PyQt5基础应用')self.setGeometry(100, 100, 400, 300)btn = QPushButton('点击我', self)btn.clicked.connect(self.buttonClicked)def buttonClicked(self):print('按钮被点击了')if __name__ == '__main__':app = QApplication(sys.argv)window = BasicApp()window.show()sys.exit(app.exec_())

在上述代码中,我们创建了一个基本的PyQt5应用程序,包括了一个窗口和一个按钮,演示了如何创建窗口和按钮,并且实现了按钮的点击事件。

4.2 实现一些常见的事件处理

PyQt5提供了丰富的事件处理方法,比如鼠标点击事件、键盘输入事件等等。下面我们来实现一些常见的事件处理,以便更好地理解PyQt5的事件机制。

# 实现鼠标点击事件处理
def mousePressEvent(self, event):print('鼠标被点击了')# 实现键盘输入事件处理
def keyPressEvent(self, event):if event.key() == Qt.Key_Escape:self.close()

在上述代码中,我们实现了鼠标点击事件处理和键盘输入事件处理,通过重写对应的方法来进行事件处理。

4.3 演示事件过滤器的功能和使用方法

除了直接重写事件处理方法,PyQt5还提供了事件过滤器的功能,可以通过事件过滤器来对事件进行过滤和修改,下面我们来演示事件过滤器的功能和使用方法。

# 演示事件过滤器的功能和使用方法
class EventFilterApp(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('事件过滤器演示')self.setGeometry(100, 100, 400, 300)self.installEventFilter(self)def eventFilter(self, obj, event):if event.type() == QEvent.MouseButtonPress:print('过滤器捕获了鼠标按下事件')return True  # 表示事件已经被过滤器处理return False

在上述代码中,我们创建了一个新的窗口并安装了事件过滤器,通过重写eventFilter方法来实现自定义的事件过滤逻辑。

五、结语

在本篇博客中,我们对PyQt5事件机制进行了一次全面的分析和讲解。通过对事件机制的原理分析和实战演练,我们深入了解了事件机制的重要性和工作原理。在学习和开发PyQt5应用程序时,事件机制常常是不可或缺的一部分,它可以帮助我们实现应用程序的各种交互效果,也可以帮助我们管理程序的运行状态。因此,深入了解和掌握PyQt5事件机制对于我们的开发工作是非常有益的。

5.1 总结PyQt5事件机制的重要性

PyQt5事件机制是PyQt5框架中非常重要的一部分,它是程序响应用户操作的重要机制。通过事件机制,我们可以实现程序的不同交互效果,例如,通过鼠标事件或键盘事件来捕获用户的操作,通过定时器事件来实现定时任务的执行等。同时,PyQt5事件机制还可以帮助我们管理程序的运行状态,例如,在程序运行过程中,我们可以通过事件机制监测网络状态或文件状态的变化,从而做出相应的处理。

除此之外,PyQt5事件机制还可以帮助我们实现程序的非阻塞运行。在GUI编程中,通常需要在主线程中处理用户的输入事件,但同时,我们还需要保证程序的其它部分也能够及时响应,例如,定时器的执行或后台任务的处理。通过PyQt5事件机制,我们可以很容易地实现多线程或协程模式,从而提高程序的运行效率和响应能力。

总之,PyQt5事件机制是PyQt5框架中一个非常重要的部分,无论是对于GUI编程还是非阻塞程序的编写,都是一个不可或缺的工具。

5.2 可能的扩展和深入学习方向

对于PyQt5事件机制的深入学习和扩展,本篇博客中只是一个起点。在实际的项目开发中,我们还需要更加深入地理解事件机制的原理和应用,才能更好地运用它来解决实际问题。以下是一些可能的扩展和深入学习方向:

  • 事件过滤器的使用:PyQt5中的事件过滤器可以帮助我们拦截和处理指定对象的事件,从而在不修改原有代码的情况下,实现相应的功能。
  • 自定义事件的实现:在一些场合下,我们可能需要自定义一些事件类型,以实现某些特殊的交互效果。在PyQt5中,可以通过继承QObject和定义事件类型来实现自定义事件。
  • 异步编程和协程模式:异步编程和协程模式可以帮助我们实现更快速和响应的程序,并且可以更好地利用多核处理器的性能。在PyQt5中,可以通过QThread和asyncio等来实现异步编程和协程模式。
  • 跨平台开发和封装:PyQt5是一个跨平台的GUI开发框架,可以帮助我们实现多平台的程序开发。在实际开发中,我们可能需要考虑平台差异和库的封装问题,以便更好地复用代码和降低开发成本。

总之,PyQt5事件机制是一个广泛应用的工具,在不同的应用场合下,可以实现不同的功能和效果。通过对事件机制的深入学习和扩展,我们可以更好地实现应用程序的开发和优化。

感谢您阅读本文,您的鼓励将是我最大的动力。在编写本篇博客的过程中,我深深地感受到了对PyQt5事件机制的热爱和执着。希望通过这篇博客,您能对PyQt5事件机制有更深入的了解,也希望能给您在日常的开发工作中带来一些启发和帮助。

相关文章:

PyQt5事件机制解析:从原理到实战一网打尽!

PyQt5事件机制 一、简介1.1 PyQt5的概述和作用 1.2 为什么学习PyQt5事件机制1.2.1 实现用户交互1.2.2 处理复杂逻辑1.2.3 自定义用户界面行为1.2.4 优化性能 二、PyQt5事件机制初步了解2.1 PyQt5事件的概念和基本原理2.1.1 PyQt5事件的概念2.1.2 PyQt5事件的基本原理 2.2 事件处…...

GraphQL与RESTful API的区别和优势

GraphQL GraphQL是一种用于API设计的语言和查询协议,由Facebook于2015年推出。它允许客户端向服务器指定他们需要的数据字段,而不是像RESTful API那样请求整个资源然后过滤数据。在GraphQL中,客户端发送一个单一的请求,而服务器返…...

关于 Qt4Qt5迁移至Qt6出现QDesktopWidget和QApplication::desktop()删除后兼容Qt6 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140036861 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

【HarmonyOS NEXT】鸿蒙Socket 连接

简介 Socket 连接主要是通过 Socket 进行数据传输,支持 TCP/UDP/Multicast/TLS 协议。 基本概念 Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。TCP:传输控制协议(Transmission Control Proto…...

1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot在线维修预约服务应用系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发 ),系统具有完整的源代码和…...

【vue】实现自动轮播+滚轮控制

前言 有一个无缝轮播+滚轮控制的需求,找了很多的方法发现都没办法完美的实现这种效果。 用原生的js实现不是无缝滚动 用无缝滚动插件实现,发现pc端无法实现滚轮控制 目标 1 实现表格表无缝循环滚动 2 实现滚轮控制表格表数据滚动 3 掌握vue-seamless-scroll使用方式 一些思考…...

鸿翼FEX文件安全交换系统,打造安全高效的文件摆渡“绿色通道”

随着数字经济时代的到来,数据已成为最有价值的生产要素,是企业的重要资产之一。随着数据流动性的增强,数据安全问题也随之突显。尤其是政务、金融、医疗和制造业等关键领域组织和中大型企业,面临着如何在保障数据安全的同时&#…...

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活

在如今多元的数字时代,我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说,有时候需要在自己的电脑上安装 Windows 操作系统,以体验更多软件及功能,而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…...

昇思25天学习打卡营第11天|基于MindSpore通过GPT实现情感分类

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类 %%capture captured_output # 实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号 !pip uninsta…...

【Python】变量与基本数据类型

个人主页:【😊个人主页】 系列专栏:【❤️Python】 文章目录 前言变量声明变量变量的命名规则 变量赋值多个变量赋值 标准数据类型变量的使用方式存储和访问数据:参与逻辑运算和数学运算在函数间传递数据构建复杂的数据结构 NameE…...

Unity按键表大全

Unity键值对应表# KeyCode是由Event.keyCode返回的。这些直接映射到键盘上的物理键,以下是键值对应列表: 常用键# Backspace 退格键 Delete Delete键 TabTab键 Clear Clear键 Return 回车键 Pause 暂停键 Escape ESC键 Space 空格键 小键盘# …...

第一周java。2

方法的作用 将重复的代码包装起来,写成方法,提高代码的复用性。 方法的语法 方法的语法格式如下 : [修饰符] 方法返回值类型 方法名(形参列表) { //由零条到多条可执行性语句组成的方法体return 返回值; } 定义方法语法格式的详细说明如下&#xf…...

Arduino - Keypad 键盘

Arduino - Keypad Arduino - Keypad The keypad is widely used in many devices such as door lock, ATM, calculator… 键盘广泛应用于门锁、ATM、计算器等多种设备中。 In this tutorial, we will learn: 在本教程中,我们将学习: How to use key…...

国产芯片方案/蓝牙咖啡电子秤方案研发

咖啡电子秤芯片方案精确值可做到分度值0.1g的精准称重,并带有过载提示、自动归零、去皮称重、压低报警等功能,工作电压在2.4V~3.6V之间,满足于咖啡电子秤的电压使用。同时咖啡电子秤PCBA设计可支持四个单位显示,分别为:g、lb、oz、…...

reactjs18 中使用@reduxjs/toolkit同步异步数据的使用

react18 中使用reduxjs/toolkit 1.安装依赖包 yarn add reduxjs/toolkit react-redux2.创建 store 根目录下面创建 store 文件夹,然后创建 index.js 文件。 import { configureStore } from "reduxjs/toolkit"; import { counterReducer } from "…...

剧本杀小程序:助力商家发展,提高游戏体验

近几年,剧本杀游戏已经成为了当下年轻人娱乐的游戏社交方式。与其他游戏相比,剧本杀游戏具有强大的社交性,玩家在游戏中既可以推理玩游戏,也可以与其他玩家交流互动,提高玩家的游戏体验感。 随着互联网的发展&#xf…...

pikachu靶场 利用Rce上传一句话木马案例(工具:中国蚁剑)

目录 一、准备靶场,进入RCE 二、测试写入文件 三、使用中国蚁剑 一、准备靶场,进入RCE 我这里用的是pikachu 打开pikachu靶场,选择 RCE > exec "ping" 测试是否存在 Rce 漏洞 因为我们猜测在这个 ping 功能是直接调用系统…...

CenterOS7安装java

CenterOS7安装java #进入安装目录 cd /usr/local/soft/java#wget下载java8 #直接进入官网选择相应的版本进行下载,然后把下载链接复制下来就可以下载了 #不时间的下载链接不一样 wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c9…...

react 重新加载子组件

在React中,要重新加载某个子组件,你可以通过改变该组件的key属性来强制它重新渲染。这是因为React会在key变化时销毁旧的组件实例并创建一个新的实例。 多的不说直接上代码 import React, { useState } from react; import ChildComponent from ../chil…...

从零开始使用WordPress搭建个人网站并一键发布公网详细教程

文章目录 前言1. 搭建网站:安装WordPress2. 搭建网站:创建WordPress数据库3. 搭建网站:安装相对URL插件4. 搭建网站:内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 固定WordPress公网地址5.1. 固定地…...

浅谈chrome引擎

Chrome引擎主要包括其浏览器内核Blink、JavaScript引擎V8以及其渲染、网络、安全等子系统。下面我将对这些关键部分进行简要说明分析 1. Blink浏览器内核 Blink是Google开发的浏览器排版引擎,自Chrome 28版本起替代了Webkit作为Chrome的渲染引擎。Blink基于Webkit…...

【常用知识点-Java】创建文件夹

Author:赵志乾 Date:2024-07-04 Declaration:All Right Reserved!!! 1. 简介 java.io.File提供了mkdir()和mkdirs()方法创建文件夹,两者区别:mkdir()仅创建单层文件夹,如…...

【JavaScript脚本宇宙】颜色处理神器大比拼:哪款JavaScript库最适合你?

提升设计与开发效率:深入解析六大颜色处理库 前言 在现代前端开发中,颜色处理是设计和用户体验的重要组成部分。无论是网页设计、数据可视化还是图形设计,都需要强大的颜色处理功能来实现多样化的视觉效果。本文将探讨几种流行的JavaScript…...

怎么录制电脑内部声音?好用的录音软件分享,看这篇就够了!

如何录制电脑内部声音?平时使用电脑工作,难免会遇到需要录音的情况。好用的录音软件有很多,也有部分录屏工具也支持录音功能。 那么如何录制电脑内部声音呢?本文整理了几个录制电脑内部声音的方法,如果你需要在电脑上录…...

ios CCNSDate.m

// // CCNSDate.h // CCFC // // Created by xichen on 11-12-17. // Copyright 2011年 ccteam. All rights reserved. //#import <Foundation/Foundation.h>interface NSDate(cc)// 获取系统时间(yyyy-MM-dd HH:mm:ss.SSS格式)(NSString *)getSystemTimeStr;// prin…...

Windows系统安装SSH服务结合内网穿透配置公网地址远程ssh连接

前言 在当今的数字化转型时代&#xff0c;远程连接和管理计算机已成为日常工作中不可或缺的一部分。对于 Windows 用户而言&#xff0c;SSH&#xff08;Secure Shell&#xff09;协议提供了一种安全、高效的远程访问和命令执行方式。SSH 不仅提供了加密的通信通道&#xff0c;…...

虚拟机与主机的联通

本地光纤分配地址给路由器--》连结路由器是连结局域网--》由路由器分配IP地址 因此在网站上搜索的IP与本机的IP是不一样的 1.windows查看主机IP地址 在终端输入 2.linux虚拟机查看ip 3.主机是否联通虚拟机ping加ip...

2024年中国网络安全市场全景图 -百度下载

是自2018年开始&#xff0c;数说安全发布的第七版全景图。 企业数智化转型加速已经促使网络安全成为全社会关注的焦点&#xff0c;在网络安全边界不断扩大&#xff0c;新理念、新产品、新技术不断融合发展的进程中&#xff0c;数说安全始终秉承科学的方法论&#xff0c;以遵循…...

Linux脚本自动安装 docker

使用官方安装脚本自动安装 需使用 root 或sudu 权限账户安装 安装命令如下&#xff1a; curl -fsSL https://test.docker.com -o install-docker.shsudo sh install-docker.sh脚本中指令: –version 安装指定版本 Use the --version option to install a specific version, f…...

【计算智能】遗传算法(一):基本遗传算法(SGA)理论简介

前言 本系列文章架构概览&#xff1a; ​编辑 本文将介绍基本遗传算法在解决优化问题中的应用,通过实验展示其基本原理和实现过程&#xff1a;选取一个简单的二次函数作为优化目标&#xff0c;并利用基本遗传算法寻找其在指定范围内的最大值。 1. 遗传算法&#xff08;GA&…...

win10系统让当前用户拥有管理员权限

本方法应该也适用于win11 大家在安装系统的时候&#xff0c;如果开始你不重新建立一个账号。直接使用默认的administror登录&#xff0c;那么这个时候电脑只有1个账户&#xff0c;但是如果你在刚开始的时候建立了一个新的&#xff0c;比如你姓李 名字叫帅哥&#xff0c;那么这…...

Redis持久化的三种方式(RDB、AOF和混合)

Redis持久化的三种方式(RDB、AOF和混合) 目录 Redis持久化的三种方式(RDB、AOF和混合)介绍RDB示例1.配置文件2.触发 RDB 快照保存3.验证 AOF示例1.配置文件2.校验 混合型持久化存储配置文件 介绍 Redis数据主要存储与内存中&#xff0c;因此如果服务器意外重启、宕机、崩溃&am…...

Telnet发送get/post请求

连接到HTTP服务器 telnet www.baidu.com 80Ctrl ] 发送请求 GET /index.html HTTP/1.1 Host: www.baidu.com# 发送post请求 POST /test/firstTest HTTP/1.1 HOST:127.0.0.1 Content-Type:application/x-www-form-urlencoded Content-Length:10连续按两次 Enter 键发送请求 HT…...

PostgreSQL匹配字符串方法

PostgreSQL匹配字符串方法 在 PostgreSQL 中&#xff0c;如果你想要检查一个包含多个由逗号分隔的值的字符串是否包含特定的子字符串&#xff0c;你可以使用字符串函数来实现这一点。由于你正在查找的是一个由逗号分隔的列表中的特定值&#xff0c;你需要确保在比较时该值不是…...

Docker镜像加速配置

由于当前运营商网络问题&#xff0c;可能会导致您拉取 Docker Hub 镜像变慢&#xff0c;索引可以配置阿里云镜像加速器。阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 每个人镜像地址都不一样&#xff0c;需要登陆阿里云自行查看&#xff0c;地址在上面&a…...

【elementui】记录解决el-tree开启show-checkbox后,勾选一个叶结点后会自动折叠的现象

第一种解决方案&#xff1a;设置default-expand-keys的值为当前选中的key值即可 <el-treeref"tree"class"checkboxSelect-wrap":data"treeData"show-checkboxnode-key"id":expand-on-click-node"true":props"defau…...

用Vue3和Plotly.js绘制交互式3D烛形图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Plotly.js实现交互式K线图 应用场景 K线图广泛应用于金融领域&#xff0c;用于展示股票、外汇等金融产品的价格走势。它直观地呈现了开盘价、收盘价、最高价和最低价等信息&#xff0c;帮助投资者分析市场趋势…...

git上传文件

git init git add . git commit -m " " git remote add origin 仓库的地址 git push -u origin master 如果出现以下问题 可以用这一句强制上传 git push -f origin master...

Redis 7.x 系列【16】持久化机制之 AOF

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 执行原理2.1 Redis 6.x2.1.1 直接写2.1.2 重写 2.2 Redis 7.x2.2.1 直接写2…...

使用 PostGIS 生成矢量图块

您喜欢视听学习吗&#xff1f;观看视频指南&#xff01; 或者直接跳到代码 Overture Maps Foundation是由亚马逊、Meta、微软和 tomtom 发起的联合开发基金会项目&#xff0c;旨在创建可靠、易于使用、可互操作的开放地图数据。 Overture Maps 允许我们以GeoJSON格式下载开放…...

WebSocket 心跳机制如何实现

是一种简单并且有效的策略&#xff0c;用于维持长链接的活跃状态&#xff0c;防止因为网络空闲或者不稳定因素&#xff0c;导致链接意外中断。通过周期性的心跳消息&#xff0c;确保了链接的持久性和周期性&#xff0c;是维持实时通信服务稳定运行的关键组件。 1. 定时发送心跳…...

Docker 容器连接

Docker 容器连接 引言 在当今的软件开发和运维领域,Docker 已经成为了一个不可或缺的工具。它通过容器化的方式,为开发者提供了一种轻量级、可移植的计算环境。然而,要充分发挥 Docker 的潜力,我们需要掌握如何连接这些容器。本文将深入探讨 Docker 容器连接的概念、方法…...

【C语言】continue 关键字

当在C语言中使用continue关键字时&#xff0c;它用于控制循环语句的执行流程。与break不同&#xff0c;continue不会终止整个循环&#xff0c;而是终止当前迭代&#xff0c;并立即开始下一次迭代。这种行为使得可以在循环内部根据特定条件跳过某些代码块&#xff0c;从而控制程…...

Taro + vue3 中微信小程序中实现拉起支付

在前端开发中 H5 的拉起支付和微信小程序的拉起支付 是不太一样的 现在分享一下微信小程序中的拉起支付 逻辑都在后端 我是用的Taro 框架 其实就是一个Api Taro 文档...

003-GeoGebra如何无缝嵌入到PPT里

GeoGebra无缝嵌入到PPT里真是一个头疼的问题&#xff0c;已成功解决&#xff0c;这里记录一下&#xff0c;希望可以帮助到更多人。 注意&#xff0c;后续所有的文章说的PPT都是Offce Power Point, 不要拿着WPS的bug来问我哦&#xff0c;我已经戒WPS了&#xff08;此处表示无奈&…...

AI:开发者的朋友还是对手?

AI是在帮助开发者还是取代他们&#xff1f; 在软件开发领域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试&#xff0c;AI工具正在成为开发者的得力助手。然而&#xff0c;这也引发了对开发者职业…...

如何在Android Studio中查看APP客户端日志

测试Android应用时&#xff0c;日志查看是一个至关重要的调试工具&#xff0c;它帮助测试人员快速定位问题。幸运的是&#xff0c;Android Studio为我们提供了一个强大的工具——Logcat&#xff0c;使得查看运行时日志变得直接且简单。本文将引导你如何在Android Studio中使用L…...

2024微信小程序期末大作业-点奶茶微信小程序(后端nodejs-server)(附下载链接)_微信小程序期末大作业百度网盘下载

菜单展示 购物车展示&#xff1a; 提交订单&#xff1a; 支付详情页展示&#xff1a; 订单查看&#xff1a; 查看历史消费&#xff1a; 部分代码展示&#xff1a; <!--pages/home/home.wxml--> <block wx:for"{{listData}}" wx:key"itemlist&qu…...

Qt:4.信号和槽

目录 1.信号源、信号和槽&#xff1a; 2.Qt类的继承关系&#xff1a; 3.自定义槽函数&#xff1a; 4.第一种信号和槽的连接的方法&#xff1a; 5.第二种信号和槽的连接的方法&#xff1a; 6.自定义信号&#xff1a; 7.发射信号&#xff1a; 8.信号和槽的传参&#xff1a;…...

Ubuntu20.04更新GLIBC到2.35版本

目录 1 背景2 增加源2.1 标准源2.2 镜像源 3 更新 1 背景 Ubuntu20.04默认GLIBC库版本是2.31.今天碰到一个软件需要2.35版本的GLIBC。 升级GLIBC库有两种方式&#xff1a; 下载高版本库源码&#xff0c;编译后替换系统中低版本库。由于GLIBC库是Linux系统中最基础库&#xff…...