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

【Python篇】PyQt5 超详细教程——由入门到精通(序篇)

文章目录

  • PyQt5 超详细入门级教程
  • 前言
    • 序篇:1-3部分:PyQt5基础与常用控件
      • 第1部分:初识 PyQt5 和安装
        • 1.1 什么是 PyQt5?
        • 1.2 在 PyCharm 中安装 PyQt5
        • 1.3 在 PyCharm 中编写第一个 PyQt5 应用程序
        • 1.4 代码详细解释
        • 1.5 在 PyCharm 中运行程序
        • 1.6 常见问题排查
        • 1.7 总结
      • 第2部分:创建 PyQt5 应用程序与布局管理
        • 2.1 PyQt5 的基本窗口结构
        • 2.2 基本的 PyQt5 窗口与布局
          • QWidget 与 QMainWindow 的区别
        • 2.3 布局管理器
        • 2.4 在窗口中使用布局管理器
        • 2.5 代码详解
        • 2.6 更多布局管理器介绍
          • QGridLayout (网格布局管理器)
          • 代码详解:
        • 2.7 总结
      • 第3部分:常用控件详解
        • 3.1 QLabel(标签)
          • 代码详解:
        • 3.2 QPushButton(按钮)
          • 代码详解:
        • 3.3 QLineEdit(单行文本框)
          • 代码详解:
        • 3.4 QCheckBox(复选框)
          • 代码详解:
        • 3.5 QComboBox(下拉列表)
          • 代码详解:
      • 3.6 总结
    • 1-3部分总结

PyQt5 超详细入门级教程

前言

建议把代码复制到pycharm等IDE上面看实际效果,方便理解嗷❤️

序篇:1-3部分:PyQt5基础与常用控件


第1部分:初识 PyQt5 和安装


1.1 什么是 PyQt5?

PyQt5 是 Python 的图形用户界面 (GUI) 框架,它基于强大的 Qt 库。Qt 是一个跨平台的 C++ 框架,用于构建桌面应用程序。通过 PyQt5,我们可以用 Python 轻松构建跨平台的桌面应用程序,支持 Windows、macOS 和 Linux。


1.2 在 PyCharm 中安装 PyQt5
  1. 打开 PyCharm: 打开你的 PyCharm 编辑器,确保你已经有一个项目或新建一个项目。

  2. 安装 PyQt5: 你可以在 PyCharm 中使用两种方式安装 PyQt5:

    • 方法 1:通过 PyCharm 的设置安装

      • 点击 File -> Settings
      • 在设置界面中,选择 Project -> Python Interpreter
      • 点击右侧的 + 按钮,搜索 PyQt5
      • 选择 PyQt5 并点击 Install Package 安装。
    • 方法 2:通过 PyCharm 终端安装

      • 打开 Terminal 窗口(在 PyCharm 底部菜单栏中找到“Terminal”选项)。

      • 输入以下命令安装 PyQt5:

        pip install PyQt5
        
      • 安装完成后,PyCharm 会自动识别并添加 PyQt5 到项目中。

  3. 检查安装是否成功: 你可以通过在终端中运行 pip list 查看是否安装了 PyQt5。


1.3 在 PyCharm 中编写第一个 PyQt5 应用程序

接下来,我们将在 PyCharm 中创建一个简单的 PyQt5 应用程序,显示一个包含 “Hello, World!” 的窗口。

  1. 创建 Python 文件
    • 在 PyCharm 项目中,右键点击项目文件夹,选择 New -> Python File,将文件命名为 main.py
  2. 编写代码: 在新建的 main.py 文件中,输入以下代码:
import sys  # 导入 sys 模块,用于与 Python 解释器交互
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow  # 从 PyQt5 中导入所需的类# 创建一个主窗口类,继承自 QMainWindow
class MainWindow(QMainWindow):def __init__(self):super().__init__()  # 调用父类 QMainWindow 的初始化方法self.setWindowTitle("PyQt5 第一个窗口")  # 设置窗口标题# 创建一个 QLabel 标签,并将其作为主窗口的中央控件label = QLabel("Hello, World!", self)self.setCentralWidget(label)  # 将标签作为窗口的中央控件# 创建一个 PyQt5 应用程序对象
app = QApplication(sys.argv)# 创建主窗口实例
window = MainWindow()
window.show()  # 显示窗口# 进入应用程序的事件循环,保持应用程序运行,直到关闭窗口
sys.exit(app.exec_())

1.4 代码详细解释
  1. import sys
    • 作用sys 是 Python 的内置模块,提供了一些与 Python 解释器进行交互的功能。在 PyQt5 中,sys.exit() 用来确保应用程序关闭时退出干净,不留任何后台进程。
  2. from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
    • QApplication:每个 PyQt5 程序必须有一个 QApplication 实例,它管理应用程序的控制流和设置。
    • QMainWindow:这是 PyQt5 中的主窗口类,它是所有复杂窗口的基础。可以包含菜单栏、工具栏、状态栏、中央控件等。
    • QLabel:这是一个简单的控件,用于显示文本。
  3. class MainWindow(QMainWindow):
    • 作用:定义了一个名为 MainWindow 的类,继承自 QMainWindow。通过继承 QMainWindow,我们可以自定义窗口的行为和外观。
  4. self.setWindowTitle("PyQt5 第一个窗口")
    • 作用:设置窗口的标题,标题显示在应用程序窗口的顶部。
  5. label = QLabel("Hello, World!", self)
    • 作用:创建一个 QLabel 控件,显示文本 “Hello, World!”。
    • self 参数:将标签关联到当前窗口(MainWindow),即将其设置为窗口的子控件。
  6. self.setCentralWidget(label)
    • 作用:设置 label 为窗口的中央控件,中央控件是填充窗口中间区域的控件。
  7. app = QApplication(sys.argv)
    • 作用QApplication 是 PyQt5 应用程序的基础,每个 PyQt5 应用程序都必须有一个 QApplication 实例,它管理整个应用程序的生命周期和事件处理。
    • sys.argv:传递命令行参数,通常可以忽略。
  8. window.show()
    • 作用:将窗口设置为可见,并显示在屏幕上。
  9. sys.exit(app.exec_())
    • 作用app.exec_() 开始应用程序的事件循环,保持应用程序的持续运行,直到用户关闭窗口。sys.exit() 确保应用程序正常退出。

1.5 在 PyCharm 中运行程序
  1. 确保你的 PyQt5 安装正确,并且代码已经保存。
  2. 点击 PyCharm 界面顶部的绿色 Run 按钮,或者右键点击代码文件并选择 Run ‘main’

运行代码后,你将看到一个包含 “Hello, World!” 的窗口弹出。
在这里插入图片描述


1.6 常见问题排查
  1. 没有安装 PyQt5:确保你已经在项目的解释器中正确安装了 PyQt5,可以通过 pip list 命令检查是否安装。
  2. 解释器配置错误:确保 PyCharm 中使用的 Python 解释器与安装了 PyQt5 的 Python 版本一致。
  3. 窗口不显示:检查代码中是否调用了 window.show(),没有调用该方法窗口将不会显示。

1.7 总结
  • PyQt5 是一个非常强大的 GUI 框架,适合用于创建桌面应用程序。
  • 我们通过简单的几行代码,创建了一个带有文本标签的基本窗口。
  • 你可以通过 PyCharm 轻松运行 PyQt5 程序,并使用其强大的功能来构建复杂的用户界面。

第2部分:创建 PyQt5 应用程序与布局管理


2.1 PyQt5 的基本窗口结构

在 PyQt5 中,窗口(window)是应用程序的核心部分。我们已经了解了如何创建一个简单的 QMainWindow,并在其中显示一些基本内容,比如文本标签 (QLabel)。现在,我们将进一步了解 PyQt5 中的 布局管理,并学习如何合理地组织多个控件,使界面更具交互性和美观性。


2.2 基本的 PyQt5 窗口与布局
QWidget 与 QMainWindow 的区别
  • QWidget:是 PyQt5 中的所有控件(如按钮、标签、文本框等)的基类。任何可视化控件基本上都可以继承自 QWidget。它也是最基础的窗口控件,可以用来创建简单的窗口。
  • QMainWindow:是一个高级窗口控件,继承自 QWidget,但是它具有更多的功能,比如菜单栏、工具栏、状态栏等。你可以把 QMainWindow 理解为一个“带更多功能的高级窗口”。

2.3 布局管理器

在开发 GUI 应用程序时,如何排列和管理窗口中的控件至关重要。PyQt5 提供了几个常用的布局管理器,让控件自动调整位置和大小。常见的布局管理器有:

  1. QVBoxLayout:垂直布局管理器,控件从上到下排列。
  2. QHBoxLayout:水平布局管理器,控件从左到右排列。
  3. QGridLayout:网格布局管理器,控件按网格排列。
  4. QFormLayout:表单布局管理器,适合排列标签和输入框。

2.4 在窗口中使用布局管理器

我们来创建一个包含多个控件的窗口,使用 QVBoxLayoutQHBoxLayout 来组织这些控件。

完整代码:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel# 创建一个主窗口类,继承自 QMainWindow
class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("PyQt5 布局示例")  # 设置窗口标题# 创建主窗口中的中央控件,QMainWindow 需要设置中央控件central_widget = QWidget(self)self.setCentralWidget(central_widget)# 创建垂直布局管理器vbox_layout = QVBoxLayout()# 创建标签控件并添加到布局中label = QLabel("这是一个标签")vbox_layout.addWidget(label)# 创建水平布局管理器hbox_layout = QHBoxLayout()# 创建两个按钮,并添加到水平布局中button1 = QPushButton("按钮 1")button2 = QPushButton("按钮 2")hbox_layout.addWidget(button1)hbox_layout.addWidget(button2)# 将水平布局添加到垂直布局中vbox_layout.addLayout(hbox_layout)# 将布局设置为中央控件的布局central_widget.setLayout(vbox_layout)# 创建应用程序对象
app = QApplication(sys.argv)# 创建主窗口
window = MainWindow()
window.show()# 进入应用程序的事件循环
sys.exit(app.exec_())

2.5 代码详解
  1. QWidgetQMainWindow
    • 我们使用了 QMainWindow 作为主窗口,主窗口需要设置一个中央控件,所以我们创建了一个 QWidget 实例 central_widget
    • setCentralWidget() 方法用于将 QWidget 设置为 QMainWindow 的中央控件,这个中央控件是放置所有其他控件的容器。
  2. 布局管理器:QVBoxLayout 与 QHBoxLayout
    • QVBoxLayout 是一个垂直布局管理器,控件会从上到下排列。
    • QHBoxLayout 是一个水平布局管理器,控件会从左到右排列。
    • 我们先在窗口中添加了一个标签,然后再添加了两个水平排列的按钮。按钮排列在水平布局中,水平布局本身又嵌入到了垂直布局中,形成了一种灵活的组合布局。
  3. 添加控件到布局
    • vbox_layout.addWidget(label) 将标签控件添加到垂直布局中。
    • hbox_layout.addWidget(button1)hbox_layout.addWidget(button2) 将按钮控件添加到水平布局中。
  4. 布局嵌套
    • 通过 vbox_layout.addLayout(hbox_layout),我们将水平布局嵌入到垂直布局中,实现更复杂的布局结构。
      在这里插入图片描述

2.6 更多布局管理器介绍
QGridLayout (网格布局管理器)

QGridLayout 允许你以网格的形式排列控件,每个控件可以放置在指定的行和列中。它适合用来创建表单或矩阵式的控件布局。

QGridLayout 示例:

from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QLabel, QPushButton
import sysclass MainWindow(QWidget):def __init__(self):super().__init__()self.setWindowTitle("QGridLayout 示例")# 创建一个网格布局layout = QGridLayout()# 添加控件到网格布局的特定行和列layout.addWidget(QLabel("标签 1"), 0, 0)  # 在第 0 行,第 0 列添加标签layout.addWidget(QPushButton("按钮 1"), 0, 1)  # 在第 0 行,第 1 列添加按钮layout.addWidget(QLabel("标签 2"), 1, 0)  # 在第 1 行,第 0 列添加标签layout.addWidget(QPushButton("按钮 2"), 1, 1)  # 在第 1 行,第 1 列添加按钮# 将布局设置为窗口的布局self.setLayout(layout)app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
代码详解:
  1. QGridLayout():创建了一个网格布局对象。
  2. addWidget(widget, row, column):将控件添加到指定的行和列中,比如 (0, 0) 表示控件放置在第一行第一列。
    在这里插入图片描述

2.7 总结

在这一部分中,我们学习了如何在 PyQt5 中使用布局管理器来组织窗口内的控件。我们主要介绍了几种常见的布局方式:

  • QVBoxLayout:垂直排列控件。
  • QHBoxLayout:水平排列控件。
  • QGridLayout:网格方式排列控件。

通过使用这些布局管理器,我们可以让窗口中的控件自动调整位置和大小,而不需要手动计算控件的坐标。

这部分在之后还会有更加详细的介绍


第3部分:常用控件详解

在 PyQt5 中,常用的控件(也称为小部件)有很多,它们可以用来实现用户界面中的各种元素,比如按钮、文本框、复选框等。接下来,我们将逐一介绍,并展示如何使用这些控件。


3.1 QLabel(标签)

QLabel 是一个用于显示文本或图片的控件。它是最简单的控件之一,常用于显示静态文本。

代码示例:

from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
from PyQt5.QtCore import Qt  # 导入 Qt 模块
import sysclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QLabel 示例")# 创建标签并设置文本label = QLabel("这是一个标签", self)# 设置标签的对齐方式label.setAlignment(Qt.AlignCenter)# 设置标签为中央控件self.setCentralWidget(label)app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
代码详解:
  1. QLabel:用于显示文本的控件。你可以设置标签的内容、字体、对齐方式等。
  2. setAlignment(Qt.AlignCenter):将标签的文本设置为居中对齐。
  3. self.setCentralWidget(label):将标签设置为窗口的中央控件。

在这里插入图片描述


3.2 QPushButton(按钮)

QPushButton 是一个按钮控件,用户可以点击按钮来触发事件。它是最常见的控件之一。

代码示例:

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
import sysclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QPushButton 示例")# 创建按钮button = QPushButton("点击我", self)# 设置按钮点击事件button.clicked.connect(self.button_clicked)# 将按钮设置为窗口的中央控件self.setCentralWidget(button)# 定义按钮点击时触发的事件def button_clicked(self):print("按钮被点击!")app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
代码详解:
  1. QPushButton:创建了一个按钮控件,显示文本为“点击我”。
  2. button.clicked.connect(self.button_clicked):连接按钮的点击信号到自定义的 button_clicked 方法。当按钮被点击时,这个方法会被触发。
  3. self.button_clicked:定义了一个槽函数,用于响应按钮点击事件。在槽函数中,程序会打印 “按钮被点击!”。
    在这里插入图片描述

3.3 QLineEdit(单行文本框)

QLineEdit 是一个单行文本框,用于让用户输入文本。你可以获取用户输入的文本并对其进行处理。

代码示例:

from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit
import sysclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QLineEdit 示例")# 创建文本框self.line_edit = QLineEdit(self)# 设置默认提示文本self.line_edit.setPlaceholderText("请输入文本")# 将文本框设置为中央控件self.setCentralWidget(self.line_edit)# 连接文本输入结束的信号到槽函数self.line_edit.returnPressed.connect(self.return_pressed)def return_pressed(self):# 获取用户输入的文本text = self.line_edit.text()print(f"用户输入: {text}")app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
代码详解:
  1. QLineEdit:创建了一个单行文本框控件,允许用户输入文本。
  2. setPlaceholderText():设置占位符文本,当用户没有输入时显示提示文本。
  3. self.line_edit.returnPressed.connect(self.return_pressed):连接用户按下“回车键”时的信号到 return_pressed 槽函数,获取输入文本并打印出来。
    在这里插入图片描述

3.4 QCheckBox(复选框)

QCheckBox 是一个复选框,用户可以选择或取消选择该选项。它通常用于让用户勾选某些偏好或选项。

代码示例:

from PyQt5.QtWidgets import QApplication, QMainWindow, QCheckBox
import sysclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QCheckBox 示例")# 创建复选框self.checkbox = QCheckBox("同意条款", self)# 设置复选框状态改变事件self.checkbox.stateChanged.connect(self.checkbox_changed)# 将复选框设置为中央控件self.setCentralWidget(self.checkbox)def checkbox_changed(self, state):if state == Qt.Checked:print("复选框被勾选")else:print("复选框未被勾选")app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
代码详解:
  1. QCheckBox:创建一个复选框,显示文本为“同意条款”。
  2. self.checkbox.stateChanged.connect(self.checkbox_changed):连接复选框状态改变的信号到槽函数 checkbox_changed,当用户勾选或取消勾选时会触发相应的事件。
  3. checkbox_changed(self, state):根据复选框的状态(勾选或未勾选)打印相应的消息。

在这里插入图片描述


3.5 QComboBox(下拉列表)

QComboBox 是一个下拉列表控件,用户可以从中选择一个选项。

代码示例:

from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox
import sysclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QComboBox 示例")# 创建下拉列表self.combobox = QComboBox(self)# 添加选项self.combobox.addItems(["选项 1", "选项 2", "选项 3"])# 连接下拉列表选项改变事件self.combobox.currentIndexChanged.connect(self.combobox_changed)# 将下拉列表设置为中央控件self.setCentralWidget(self.combobox)def combobox_changed(self, index):# 获取当前选中的文本text = self.combobox.currentText()print(f"当前选中: {text}")app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
代码详解:
  1. QComboBox:创建一个下拉列表控件,用户可以从中选择选项。
  2. self.combobox.addItems():向下拉列表中添加选项。
  3. currentIndexChanged.connect():连接下拉列表选项改变的信号到 combobox_changed 槽函数,当用户选择不同的选项时会打印选中的文本。
    在这里插入图片描述

3.6 总结

在这一部分中,我们介绍了 PyQt5 中一些常见的控件,分别是:

  • QLabel:显示静态文本或图片。
  • QPushButton:创建按钮,用户点击触发事件。
  • QLineEdit:单行文本框,用户可以输入文本。
  • QCheckBox:复选框,用户可以选择或取消选择。
  • QComboBox:下拉列表,用户可以选择一个选项。

这些控件是 GUI 应用程序的基础组成部分,它们让应用程序更加互动和可操作。


1-3部分总结

第1至第3部分中,我们介绍了 PyQt5 的基础知识和一些常用的控件。首先,我们讲解了如何安装 PyQt5,并创建了一个简单的 PyQt5 应用程序。接着,介绍了布局管理器(如 QVBoxLayout 和 QHBoxLayout),并通过它们组织界面中的控件。最后,我们深入探讨了 PyQt5 中的常用控件,如 QLabel、QPushButton、QLineEdit 和 QCheckBox,展示了如何使用这些控件处理基本的用户交互。


以上就是关于【Python篇】PyQt5 超详细教程——由入门到精通(序篇)的内容啦,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!❤️

在这里插入图片描述

相关文章:

【Python篇】PyQt5 超详细教程——由入门到精通(序篇)

文章目录 PyQt5 超详细入门级教程前言序篇:1-3部分:PyQt5基础与常用控件第1部分:初识 PyQt5 和安装1.1 什么是 PyQt5?1.2 在 PyCharm 中安装 PyQt51.3 在 PyCharm 中编写第一个 PyQt5 应用程序1.4 代码详细解释1.5 在 PyCharm 中运…...

day2 数据结构 结构体的应用

思维导图 小练习: 定义一个数组,用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息,删除后调用显示学…...

CSS 进阶教程:从定位到动画与布局

文章目录 🌟 CSS 进阶教程:从定位到动画与布局🌟 目录🌟 1. 定位**Static(默认定位)****Relative(相对定位)****Absolute(绝对定位)****Fixed(固定…...

Nginx性能优化全方案:打造一个高效服务器

Nginx性能优化全方案:打造一个高效服务器 调整工作进程数和线程数调整工作进程数调整线程数 启用Gzip压缩安装Gzip模块配置Gzip压缩 配置缓存策略配置浏览器缓存时间配置代理服务器缓存时间 优化文件访问方式使用sendfile()函数发送文件数据启用sendfile_max_chunk和…...

详解Maven的setting配置文件中mirror和repository的区别

在Maven的setting中,我们常常会用到mirror和repository配置,其中mirror是镜像的意思,而repository则是仓库的意思,它们两者都可以改变maven下载项目以来jar包的地址。 仓库(repository) repository就是个…...

框架模块说明 #07 API加密

背景 在实际开发过程中,我们通常会涉及到数据加密的问题。本文重点探讨两个方面:一是外部接口调用时的数据加密,二是服务间调用的数据加密与解密。 对于外部接口调用,每个用户将拥有独立的动态 AES 加密密钥(KEY&…...

安卓BLE蓝牙开发经验分享

注意点一:一开始必须申请权限,否则后面根本无法成功。 注意点二:BLE使用向某个特征写入来发送数据,写入一次默认长度是23字节,必须向蓝牙设备申请更大字节的写入才能发送更多字节。(23字节是BLE通信的最小…...

后缀表达式有什么场景应用

后缀表达式(Reverse Polish Notation, RPN)在多个领域中有广泛的应用,主要由于其简洁性和易于计算机处理的特点。以下是一些主要的应用场景: ### 1. **编译器和解释器** 后缀表达式在编译器和解释器中用于表达式求值。由于后缀表…...

使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构(未做共享存储版)

文章目录 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构Redis 主从架构部署 (1.yaml)Redis Sentinel 部署 (2.yaml)Sentinel 服务暴露 (3.yaml)部署步骤总结 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构 本文将详细介绍如何在 Kubernetes 中部署 Redis …...

AI开发 - 用GPT写一个GPT应用的真实案例

就在昨天,我的同事推荐给我了一个第三方的公共大模型API,这个API集合了国际上上几乎所有知名的大模型,只需要很少的费用,就可以接入到这些大模型中并使用它们。成本之低,令人乍舌!包括我们现在无法试用的 G…...

C#—索引器

C#—索引器 索引器(Indexer)是类中的一个特殊成员,它能够让对象以类似数组的形式来操作,使程序看起来更为直观,更容易编写。索引器与属性类似,在定义索引器时同样会用到 get 和 set 访问器,不同…...

杨振宁大学物理视频中黄色的字去掉(稳定简洁版本,四)

杨振宁大学物理1214 色带矩形带来很大麻烦! 今天想到一个方法,整个色带矩形拉通,做个通铺处理,不计算,代码做最小化,最稳定追求。 因为黄色字稳定,我们找到他的中心,而这个色带矩形…...

排序算法(5):归并排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 归并排序 归并排序采用分治法,将序列分成若干子序列,每个子序列有序后再合并成有序的完整序列。 在数组排序中,如果只有一个数,那么它本身就是有序的。如果有两个数&#xff0…...

Gate学习(7)引入体素源

一、从GitHub下载体素源模型源码 下载地址:BenAuer2021/Phantoms-for-Nuclear-Medicine-Imaging-Simulation:用于核医学成像应用的模型(闪烁显像、SPECT 和 PET) --- BenAuer2021/Phantoms-For-Nuclear-Medicine-Imaging-Simulat…...

2024.12.14 TCP/IP 网络模型有哪几层?

2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级,我来复盘小林coding的计算机网络的知识点: TCP/IP 网络模型有哪几层? 问大家,为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有…...

item2 for macos

安装Item2 brew install iterm2 查看终端类型 cat /etc/shells Mac OS X 10.15 已经将默认的shell从Bash换成了zsh,所以不用安装,10.15以前的可以使用下面的命令进行安装 brew install zsh 安装Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…...

二维三维空间上两点之间的距离

二维三维路径上,路径总距离以及途径点与障碍物之间的距离等都需要计算两点之间的距离。两点之间的距离有多种计算方法,这些计算方法主要取决于所考虑的空间维度、点的属性以及具体的应用场景。以下是一些常见的距离计算方法: 1. 曼哈顿距离(Manhattan distance) 定义:也…...

相机测距原理

基础概念的回顾 焦距的定义 焦距是指透镜或镜头的光学中心(通常是透镜的几何中心)到其焦点的距离。 焦点是光线的交点,它指的是透镜或镜头聚焦所有入射光线后汇聚的位置。焦点的位置与透镜的曲率和光线的入射角度相关。就是说所有光线经过…...

Debezium SchemaNameAdjuster 分析

Debezium SchemaNameAdjuster 分析 目录 1. 概述2. 核心功能3. 实现原理4. 应用场景5. 扩展示例6. 总结1. 概述 SchemaNameAdjuster 是 Debezium 中的一个工具类,主要用于确保 Schema 名称符合 Avro 命名规范。在数据库变更事件被转换为 Kafka 消息时,需要为每个表和字段创…...

Stable Diffusion绘画 | SDXL模型使用注意事项

注意事项 SDXL模型的使用,对电脑配置要求更高,需要 8GB 以上显存的显卡SDXL模型兼容性不太好,容易出现错误,对 Mac 电脑不友好只能选择 SDXL模型 训练的 LoRA 使用不能使用旧的 VAE文件 SDXL 专用 VAE 文件:sdxl_vae.…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...