【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码
目录
一、PyQt5介绍:
(1)PyQt简介:
(2)PyQt API:
(3)支持的环境:
(4)安装:
(5)配置环境变量:
二、基础程序编写方法:
(1)函数式方法创建GUI:
(2)面向对象设计GUI:
三、PyQt5中的实用工具:
四、PyQt5中的类:
(1)PyQt5类的路径:
(2)PyQt5常用类的作用:
(3)PyQt5小部件列表:
五、Qt Designer使用教程:
(1)Qt Designer位置路径:
(2)Qt Designer界面介绍:
(3)控件工具箱介绍:
(4)对象查看器介绍:
(5)属性编辑器介绍:
(6)资源编辑器介绍:
(7)信号/槽编辑器介绍:
(8)动作编辑器介绍:
六、创建Qt Designer程序:
第一步:创建主窗口
第二步:添加小部件
第三步:调整小部件
第四步:保存.ui文件
第五步:.ui转化为.py文件
编辑
第六步:创建项目
第七步:编写程序
成果演示:
一、PyQt5介绍:
(1)PyQt简介:
- PyQt是一个由RiverBank Computing Ltd开发的Python绑定,它提供了对功能强大的跨平台GUI库Qt的接口,用户可以从官方网站riverbankcomputing.com下载最新版本。
(2)PyQt API:
模块:PyQt API包含多个模块,每个模块提供不同的功能。
- QtCore:核心非GUI类,被其他模块使用。
- QtGui:包含所有图形用户界面组件。
- 其他模块:包括QtMultimedia、QtNetwork、QtOpenGL、QtScript、QtSql、QtSvg、QtWebKit、QtXml等,用于处理多媒体、网络、OpenGL、脚本、数据库、SVG文件、HTML内容和XML等。
(3)支持的环境:
- 操作系统:PyQt兼容Windows、Linux和Mac OS。
- 许可:双重许可,可在GPL和商业许可下使用。
- 最新版本:PyQt5-5.15.4。
(4)安装:
安装命令:使用清华大学的镜像链接来安装。
- 使用pip安装PyQt5:
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
- 安装开发工具(如Qt Designer):
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
(5)配置环境变量:
找到编辑系统环境变量界面,单击环境变量按钮,在系统变量Path中添加PyQt5和pyqt5-tools目录的绝对路径。
二、基础程序编写方法:
(1)函数式方法创建GUI:
import sys
# 从PyQt5.QtWidgets/QtGui/QtCore,导入所有的类,对象,函数等
# 建议只导入所需的特定类和函数
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *# 定义函数,这个函数将创建和运行一个PyQt5的GUI程序
def Demo():# 创建一个QApplication对象,这是所有PyQt5应用程序的基础# sys.argv是一个列表,包含了命令行参数,QApplication会用它来处理这些参数app = QApplication(sys.argv)# 创建一个QWidget对象,它是一个基本的窗口组件Widget = QWidget()# 创建一个QLabel对象,它是一个用于显示文本或图片的标签# 并将其实例化为QWidget Widget的子组件Label = QLabel(Widget)# 设置标签Label的文本内容为"Demo"Label.setText("Demo")# 设置窗口Widget的大小和位置,参数分别是x坐标、y坐标、宽度和高度Widget.setGeometry(0,0,500,200)# 将标签Label在窗口Widget内部移动到坐标(50, 20)的位置Label.move(250,100)# 设置窗口Widget的标题为"PyQt5"Widget.setWindowTitle("Demo")# 显示窗口wWidget.show()# 启动应用程序的事件循环,app.exec_()会阻塞直到应用程序退出# sys.exit用来退出Python解释器,app.exec_()的返回值通常作为退出状态码传递给sys.exitsys.exit(app.exec_())# 常用的Python模式,检查当前脚本是否作为主程序运行
# 如果是,就调用Demo函数
if __name__ == '__main__':Demo()
实现步骤:
- 导入模块:导入
sys
模块以及从PyQt5的QtCore
、QtGui
、QtWidgets
模块导入所有类、对象和函数。 - 定义Demo函数:定义一个名为
Demo
的函数,该函数负责创建和运行PyQt5 GUI程序。 - 创建QApplication对象:在
Demo
函数内部,创建一个QApplication
对象,它是所有PyQt5应用程序的基础,用于处理命令行参数。 - 创建QWidget和QLabel对象:创建一个
QWidget
对象作为基本窗口组件,以及一个QLabel
对象作为显示文本的标签,并将其设置为QWidget
的子组件。 - 配置QLabel:设置
QLabel
的文本内容、字体和位置。 - 配置QWidget窗口:设置
QWidget
窗口的大小、位置和标题。 - 显示窗口:使
QWidget
窗口可见。 - 启动事件循环:启动应用程序的事件循环,等待用户操作,直到应用程序退出。
- 检查主程序运行:如果当前脚本作为主程序运行,则调用
Demo
函数。
(2)面向对象设计GUI:
import sys
# 从PyQt5.QtWidgets/QtGui/QtCore,导入所有的类,对象,函数等
# 建议只导入所需的特定类和函数
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *# 定义一个名为The_xzs的类,它继承自QWidget,是一个基本的窗口组件
class The_xzs(QWidget):# 定义The_xzs类的构造函数,它接受一个可选的parent参数,默认为Nonedef __init__(self, parent=None):# 调用父类QWidget的构造函数,初始化The_xzs对象super(The_xzs, self).__init__(parent)# 设置窗口的大小为宽200像素、高50像素self.resize(500, 200)# 设置窗口的标题为"Demo"self.setWindowTitle("Demo")# 在The_xzs类中创建一个QLabel对象,并将其作为The_xzs的子组件self.label = QLabel(self)# 设置标签的文本内容为"Demo"self.label.setText("Demo")# 创建一个QFont对象,用于设置字体属性font = QFont()# 设置字体家族为"宋体"font.setFamily("宋体")# 设置字体大小为16点font.setPointSize(16)# 将设置好的字体应用到标签上self.label.setFont(font)# 将标签移动到窗口内部的坐标(250, 100)的位置self.label.move(250, 100)# 常用的Python模式,检查当前脚本是否作为主程序运行
# 如果是,就调用main函数
# 创建和运行PyQt5应用程序
if __name__ == '__main__':# 创建一个QApplication对象,它是所有PyQt5应用程序的基础,sys.argv包含了命令行参数app = QApplication(sys.argv)# 创建The_xzs类的实例xs = The_xzs()# 显示窗口xs.show()# 启动应用程序的事件循环,app.exec_()会阻塞直到应用程序退出# sys.exit用来退出Python解释器,app.exec_()的返回值通常作为退出状态码传递给sys.exitsys.exit(app.exec_())
实现步骤:
-
导入模块:导入
sys
模块以及从PyQt5的QtCore
、QtGui
、QtWidgets
模块导入所有类、对象和函数。 -
定义窗口类:定义一个名为
The_xzs
的类,继承自QWidget
,用于创建窗口。 -
初始化窗口组件:在
The_xzs
类的构造函数中初始化窗口,包括设置大小、标题,并创建一个QLabel
子组件。 -
配置标签样式:为
QLabel
设置文本、字体和位置。 -
运行程序:检查当前脚本是否作为主程序运行,如果是,则创建
QApplication
对象并启动GUI程序。 -
显示窗口:实例化
The_xzs
类并显示窗口。 -
启动事件循环:通过
app.exec_()
启动事件循环,等待用户操作直到程序退出。 -
退出程序:使用
sys.exit
退出程序,并将事件循环的返回值作为退出状态码。
三、PyQt5中的实用工具:
名字 | 作用 |
pyqt5 designer | Qt设计师GUI布局工具 |
pyuic5 | Qt用户界面编译器,用于从ui文件生成代码 |
assistant | Qt助手文档工具 |
linguist | Qt翻译工具 |
lrelease | 将ts文件编译为qm文件 |
pylupdate5 | 提取翻译字符串并生成或更新ts文件 |
qmake | Qt软件构建工具 |
pyqt5 qmlscene | QML文件查看器 |
pyqmlviewer | QML文件查看器 |
pyrcc5 | Qt资源文件编译器 |
pyqmltestrunner | 在QML代码上运行单元测试 |
qdbus | 命令行工具,用于列出D-Bus服务 |
QDoc | 软件项目的文档生成器 |
Qhelpgenerator | 生成和查看Qt帮助文件 |
qmlimportscanner | 解析和报告QML导入情况 |
四、PyQt5中的类:
PyQt API 提供了超过400个类,构成了一个强大的工具集,用于开发图形用户界面(GUI)。在这个层次结构中,QObject
是所有Qt对象的基类,而QPaintDevice
是所有可绘制对象的基类。QApplication
类负责管理GUI应用程序的控制流程和主要设置,包括主事件循环和系统及应用程序范围的设置。QWidget
是所有用户界面对象的基类,继承自QObject
和QPaintDevice
,而QDialog
和 QFrame
等类则继承自QWidget
,进一步扩展了Qt的GUI功能。
(1)PyQt5类的路径:
PyQt5的模块和类在安装后位于Python的site-packages
目录下的一个名为PyQt5
的文件夹内。
我的默认路径:
C:\Users\86173\AppData\Roaming\Python\Python38\site-packages\PyQt5
(2)PyQt5常用类的作用:
模块 | 作用 |
QtCore模块 | 包含Qt的核心非GUI功能,如事件循环、定时器、线程、文件和文件夹操作、时间和日期等。这是PyQt5的基础模块。主要类包括QObject(所有PyQt对象的基类)、QFile、QDir、QThread、QTimer等。 |
QtGui模块 | 包含窗口系统、事件处理、2D图形、基本绘画、字体和文字类。 主要类有QPainter、QFont、QColor、QImage等。 |
QtWidgets模块 | 提供了一系列用户界面控件,如按钮、文本框、标签、表格、菜单、滚动条等。继承自QWidget的类,如QMainWindow、QDialog、QPushButton等。 |
QtMultimedia模块 | 用于处理多媒体和调用摄像头API的类。包含音频、视频、摄像头相关的类库。 |
QtBluetooth模块 | 包含查找和连接蓝牙的类。 功能包括扫描设备、连接、交互等行为。 |
QtNetwork模块 | 包含网络编程的类,能让TCP/IP和UDP开发变得更加方便和可靠。 提供便捷的TCP/IP及UDP的C/S代码集合。 |
QtPositioning模块 | 包含定位的类,可以使用卫星、WiFi甚至文本。 一般用在网络地图定位系统中。 |
Enginio模块 | 用于构建客户端的应用程序库,在运行时访问Qt Cloud服务器托管的应用程序。 |
QtWebSockets模块 | 包含了一组类程序,用于实现WebSocket协议。 |
(3)PyQt5小部件列表:
小部件 | 说明 |
QLabel | 用于在用户界面中显示文本或图片。它是一个静态的显示控件,不提供用户交互功能。 |
QLineEdit | 提供一个文本输入框,允许用户输入单行文本。它常用于数据输入和搜索框。 |
QTextEdit | 允许用户编辑多行文本,适用于需要文本格式化或多行文本显示的场景。 |
QPushButton | 创建一个按钮,用户点击时可以触发一个操作或事件,常用于执行命令。 |
QRadioButton | 单选按钮,允许用户从一组选项中选择一个。单选按钮通常用于互斥选择。 |
QCheckBox | 复选框,允许用户选择或取消选择一个或多个选项。 |
QSpinBox | 提供增加和减少操作的输入框,用于输入整数值,常用于设置数值选项。 |
QScrollBar | 滚动条,允许用户通过滚动来访问超出显示范围的内容。 |
QSlider | 滑块,允许用户沿直线轨迹选择一个值,常用于调整设置或显示连续值。 |
QComboBox | 下拉列表框,提供一系列预定义选项供用户选择。 |
QMenuBar | 菜单栏,包含多个QMenu 对象,用于组织应用程序的菜单项。 |
QStatusBar | 状态栏,通常位于窗口底部,用于显示状态信息和反馈。 |
QToolBar | 工具栏,包含一系列操作按钮和控件,通常位于窗口顶部或可以浮动。 |
QListView | 列表视图,以列表模式或图标模式显示可选择的项目。 |
QPixmap | 像素映射,用于在QLabel 或QPushButton 对象上显示的屏幕外图像。 |
QDialog | 对话框,可以是模态或非模态的,用于向用户提供信息或收集输入,并可向父窗口返回信息。 |
五、Qt Designer使用教程:
(1)Qt Designer位置路径:
Qt Designer在安装后位于Python的site-packages\qt5_applications\Qt\bin
目录下。
我的默认路径:
C:\Users\86173\AppData\Roaming\Python\Python38\site-packages\qt5_applications\Qt\bin
在PyQt 5.15.x及之前的版本中,Qt Designer的可执行文件designer.exe
通常位于%Python_path%\Lib\site-packages\pyqt5_tools\Qt\bin\
目录下;而在PyQt 5.15.x及之后的版本中,该文件路径变更为%Python_path%\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
。可以在相应的路径下找到并双击designer.exe
来启动Qt Designer。
双击即可打开Qt Designer应用程序:
(2)Qt Designer界面介绍:
(3)控件工具箱介绍:
Layouts(布局) | |
Vertical Layout | 纵向布局 |
Horizontal Layout | 横向布局 |
Grid Layout | 栅格布局 |
Form Layout | 在窗体布局中布局 |
Spacers(间隔) | |
Horizontal Spacer | 水平间隔 |
Vertical Spacer | 垂直间隔 |
Buttons(按键) | |
Push Button | 普通按键 |
Tool Button | 工具按键 |
Radio Button | 单选按钮 |
Check Box | 复选框 |
Command Link Button | 命令连接按钮 |
Dialog Button Box | 对话框按钮 |
ltem Views(Model-Based)项目视图(基于模型) | |
List View | 列表视图 |
Tree View | 树状视图 |
Table View | 表格视图 |
Column View | 列视图 /直栏浏览 |
Undo View | 撤销视图更改 |
ltem Widgets (ltem-Based)项目小部件(基于项目) | |
List Widget | 列表控件 |
Tree Widget | 窗口部件树 |
Table Widget | 表部件 |
Containers(容器/本地编辑) | |
Group Box | 分组框 |
Scroll Area | 滚动区域 |
Tool Box | 工具箱 |
Tab Widget | 选项卡小部件 |
Stacked Widget | 堆小部件 |
Frame | 框架 |
Widget | 窗口小部件 |
MDI Area | MDI区域 |
小部件 | 停靠小部件 |
Input Widgets(输入组件) | |
Combo Box | 组合框 |
Font Combo Box | 字体下拉框 |
Line Edit | 行编辑器 |
Text Edit | 文本编辑器 |
Plain Text Edit | 纯文本编辑 |
Spin Box | 数字设定框 |
Double Spin Box | 双精度数字调节框 |
Time Edit | 时间编辑框 |
Data Edit | 数据编辑框 |
Dial | 转盘 |
Horizontal Scroll Bar | 水平滚动条 |
Vertical Scroll Bar | 垂直滚动条 |
Horizontal Slider | 水平滑块 |
Vertical Slider | 垂直滑块 |
Key Sequence Edit | 编辑按键序列 |
Date/Time Edit | 日期/时间编辑 |
Display Widgets(显示小部件) | |
Label | 标签 |
Text Browser | 文本浏览器 |
Graphics Widget | 图形窗口小部件 |
LCD Numbe | 数字显示控件 |
Progress Bar | 进度条 |
Horizontal Line | 水平线 |
Vertical Line | 垂直线 |
OpenGL Widget | OpenGL窗口小部件 |
Graphics View | 图形视图 |
(4)对象查看器介绍:
对象查看器在Qt Designer中的主要作用是查看和管理当前用户界面中包含的所有控件以及它们所属的类。通过对象查看器,可以直观地了解控件的层级关系和属性,便于进行界面布局的调整和控件属性的修改。对象查看器提供了一个树状结构视图,展示从顶层窗口到子控件的完整结构,使得在开发时能够快速定位和选择特定的控件,并对它们进行编辑操作。
(5)属性编辑器介绍:
属性编辑器是Qt Designer中的一个工具,它允许开发者直观地查看和修改用户界面控件的属性,包括控件的名称、大小、位置、字体、背景等等,以及为控件添加自定义属性和配置,从而提供了一个便捷的接口来调整和优化界面元素的显示和行为。
(6)资源编辑器介绍:
资源编辑器,允许开发者在设计用户界面时定义和使用Qt资源系统。资源编辑器使得每个表单都可以有一个单独的资源文件(.qrc),在其中可以添加和管理图像、图标、样式表等资源。这样,开发者可以在设计时就指定资源,并且在运行时动态加载这些资源,从而简化了资源管理,并使得应用程序的部署更加方便。
(7)信号/槽编辑器介绍:
信号/槽编辑器可以可视化地管理和建立用户界面控件之间的信号与槽连接。允许通过图形界面直接将控件的信号(如按钮点击)与相应的槽函数(响应动作)关联起来,从而实现控件间的交互逻辑,而无需手动编写连接代码。这样,可以更加直观和便捷地处理事件驱动的编程任务。
(8)动作编辑器介绍:
动作编辑器可以用于管理和配置应用程序中的动作,如菜单项、工具栏按钮和上下文菜单。通过动作编辑器,可以添加新动作、设置动作的属性(如图标、文本和快捷键),以及编辑动作的触发事件和关联的槽函数。
六、创建Qt Designer程序:
第一步:创建主窗口
打开Qt Designer应用程序创建主窗口:
第二步:添加小部件
从左窗格的小部件框中拖放所需的小部件:
第三步:调整小部件
属性编辑器调整小部件的设置:
第四步:保存.ui文件
选定保存路径及文件名称。
第五步:.ui转化为.py文件
使用pyuic5命令行实用程序,将这个设计转化为Python等效代码。
pyuic5 -x counter.ui -o counter.py
转化后的.py文件
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'counter.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 600)font = QtGui.QFont()font.setFamily("宋体")MainWindow.setFont(font)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.push_add1 = QtWidgets.QPushButton(self.centralwidget)self.push_add1.setGeometry(QtCore.QRect(180, 400, 93, 28))self.push_add1.setObjectName("push_add1")self.push_subtract1 = QtWidgets.QPushButton(self.centralwidget)self.push_subtract1.setGeometry(QtCore.QRect(540, 400, 93, 28))self.push_subtract1.setObjectName("push_subtract1")self.label_text = QtWidgets.QLabel(self.centralwidget)self.label_text.setGeometry(QtCore.QRect(300, 160, 200, 70))font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(36)self.label_text.setFont(font)self.label_text.setAlignment(QtCore.Qt.AlignCenter)self.label_text.setObjectName("label_text")self.push_reset = QtWidgets.QPushButton(self.centralwidget)self.push_reset.setGeometry(QtCore.QRect(360, 400, 93, 28))self.push_reset.setObjectName("push_reset")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.push_add1.setText(_translate("MainWindow", "+1"))self.push_subtract1.setText(_translate("MainWindow", "-1"))self.label_text.setText(_translate("MainWindow", "0"))self.push_reset.setText(_translate("MainWindow", "清零"))if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())
第六步:创建项目
将.ui文件和生成的.py同创建项目放一起。
第七步:编写程序
import sys
# 从PyQt5.QtWidgets/QtGui/QtCore,导入所有的类,对象,函数等
# 建议只导入所需的特定类和函数
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
# 导入自定义的UI界面类,该类由Qt Designer生成
from counter import Ui_MainWindow# 定义一个名为The_xzs的类,它继承自QWidget,是一个基本的窗口组件
class The_xzs(QMainWindow, Ui_MainWindow):# 定义The_xzs类的构造函数,它接受一个可选的parent参数,默认为Nonedef __init__(self, parent=None):# 调用父类QWidget的构造函数,初始化window对象super(The_xzs, self).__init__(parent)self.setupUi(self) # 使用自定义UI界面类设置界面# 连接按钮的点击信号到对应的槽函数,实现交互逻辑self.push_add1.clicked.connect(self.counter_add1) self.push_subtract1.clicked.connect(self.counter_subtract1) self.push_reset.clicked.connect(self.counter_reset) # 初始化计数器数值,并更新标签显示self.counter = 0self.label_text.setText(str(self.counter))# 计数器加一的功能实现def counter_add1(self):self.counter += 1self.label_text.setText(str(self.counter))# 计数器减一的功能实现def counter_subtract1(self):self.counter -= 1self.label_text.setText(str(self.counter))# 计数器清零的功能实现def counter_reset(self):self.counter = 0self.label_text.setText(str(self.counter))# 常用的Python模式,检查当前脚本是否作为主程序运行
# 如果是,就调用main函数
# 创建和运行PyQt5应用程序
if __name__ == '__main__':# 创建一个QApplication对象,它是所有PyQt5应用程序的基础,sys.argv包含了命令行参数app = QApplication(sys.argv)# 创建The_xzs类的实例xs = The_xzs()# 显示窗口xs.show()# 启动应用程序的事件循环,app.exec_()会阻塞直到应用程序退出# sys.exit用来退出Python解释器,app.exec_()的返回值通常作为退出状态码传递给sys.exitsys.exit(app.exec_())
成果演示:
Qt界面计数器
相关文章:
【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码
目录 一、PyQt5介绍: (1)PyQt简介: (2)PyQt API: (3)支持的环境: (4)安装: (5)配置环境变量…...
Spark on Yarn安装配置,大数据技能竞赛(容器环境)
Spark on Yarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务,由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以有效提高资源利用率。 环境说明: 服…...
★ 数据结构 ★ 排序
Ciallo~(∠・ω< )⌒☆ ~ 今天,我将和大家一起学习数据结构中的各种排序~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页:椎名澄嵐-CSDN博客 数据结构专栏:https://blog.csdn.net/2302_80328146/categ…...
数据结构 (26)图的遍历
前言 数据结构中的图遍历是指从图中的任一顶点出发,按照某种方法访问图中的所有顶点,且每个顶点只访问一次。 一、遍历方法 遍历主要有两种方法:深度优先搜索(DFS)和广度优先搜索(BFS)。 1.深度…...
用vue框架写一个时钟的页面
你可以使用Vue框架来创建一个简单的时钟页面。首先,你需要在HTML文件中引入Vue框架的CDN: <script src"https://cdn.jsdelivr.net/npm/vue"></script>然后,创建一个包含时钟功能的Vue实例: <div id&qu…...
【Android】View的工作流程——measure
1.View的工作流程入口 1.1DecorView被加载到Window中 看到这里你对Activity的构成有一定的了解,每个 Activity 都有一个与之关联的 Window 对象,而 DecorView 是这个 Window 的根视图。当DecorView被创建以及加载资源的时候,此时它的内容还…...
day35—蓝桥杯2024年第16届校赛模拟第二期-T4(最小花费)
【问题描述】 小蓝有一个整数,初始值为 1 ,他可以花费一些代价对这个整数进行变换。 小蓝可以花费 1 的代价将整数增加 1 。 小蓝可以花费 3 的代价将整数增加一个值,这个值是整数的数位中最大的那个(1 到 9)。 小蓝可…...
Java 中 List 接口的学习笔记
1. 什么是 List? 在 Java 中,List 是一个接口,属于 Java Collections Framework。它表示一个有序的集合,可以包含重复元素。List 接口允许通过索引访问元素,提供了多种实现方式,如 ArrayList 和 LinkedLis…...
朗新科技集团如何用云消息队列 RocketMQ 版“快、准、狠”破解业务难题?
作者:邹星宇、刘尧 朗新科技集团:让数字化的世界更美好 朗新科技集团股份有限公司是领先的能源科技企业,长期深耕电力能源领域,通过新一代数字化、人工智能、物联网、电力电子技术等新质生产力,服务城市、产业、生活中…...
hive hms和hs2的sql执行日志分析
HMS日志: 2024-12-02 15:39:20,811 INFO org.apache.hadoop.hive.metastore.HiveMetaStore: [pool-8-thread-114]: 114: source:10.11.17.999 get_all_databases 2024-12-02 15:39:20,812 INFO org.apache.hadoop.hive.metastore.HiveMetaStore.audit: [pool-8-thre…...
Mybatis-plus 多租户插件
前言 本篇主要分析Mybatis-plus 多租户插件,然后根据多租户插件在延伸到其他场景 案例 Mybatis-plus官网对多租户插件已有详细讲解,这里就不在附上使用案例。 源码分析 MybatisPlus官方是由TenantLineInnerInterceptor这个拦截器进行多租户功能处理…...
浅谈新能源汽车感应钥匙一键启动的步骤和特点
随着汽车智能化技术的发展,无钥匙启动系统还可以与其他智能系统进行集成,如智能车载系统、远程控制系统等。这使得车主可以通过智能手机等智能设备远程控制车辆的启动、解锁、上锁等操作,进一步提升了使用的便捷性和智能化水平。新能源汽车…...
012 路由信息协议RIP
路由信息协议RIP 作为度量(Metric)来衡量到达目的网络的距离 RIP是一种基于距离矢量D-V(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。 默认情况下,路由器到与它直接相连网络的跳数为0,因此…...
008.精读《Apache Paimon Docs - Table w/o PK》
文章目录 1. 引言2. 基本概念2.1 定义2.2 使用场景 3. 流式处理3.1 自动小文件合并3.2 流式查询 4. 数据更新4.1 查询4.2 更新4.3 分桶附加表 5 总结 1. 引言 通过本文,上篇我们了解了Apache Paimon 主键表,本期我们将继续学习附加表(Append…...
在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208
🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型(LLM)和人工智能技术的迅猛发展,开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…...
微信小程序uni-app+vue3实现局部上下拉刷新和scroll-view动态高度计算
微信小程序uni-appvue3实现局部上下拉刷新和scroll-view动态高度计算 前言 在uni-appvue3项目开发中,经常需要实现列表的局部上下拉刷新功能。由于网上相关教程较少且比较零散,本文将详细介绍如何使用scroll-view组件实现这一功能,包括动态高度计算、下拉刷新、上拉加载等完整…...
网络原理——HTTPS
一、什么是HTTPS 1.1 HTTPS的概念 HTTPS 也是⼀个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层(即HTTP SSL/TLS,SSL、TLS也是一个应用层协议,专门负责加密) HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输…...
数据结构之四:堆和二叉树
堆的实现:SData/Heap/heap.c Hera_Yc/bit_C_学习 - 码云 - 开源中国 树 树的概念 树:是一个非线性数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树,也就…...
语音识别flask接口开发
要开发一个flask语音识别接口,首先要解决语音文件在网络中的传输问题,然后选识别算法进行识别 文章目录 1、以二进制文件流方式上次语音2、网页端长连接流式上传语音文件3、语音识别接口 1、以二进制文件流方式上次语音 python服务端代码,以…...
MISRA C2012学习笔记(10)-Rules 8.15
文章目录 8.15 控制流(Control flow)Rule 15.1 不应使用 goto 语句Rule 15.2 goto 语句仅允许跳到在同一函数中声明的稍后位置的标签Rule 15.3 goto 语句引用的标签必须在 goto 语句所在代码块或包含该代码块的上级代码块中声明Rule 15.4 最多只能有一个用于终止循环语句的 bre…...
《深入浅出HTTPS》读书笔记(16):消息验证码算法分类
MAC算法有两种形式,分别是CBC-MAC算法和HMAC算法。 CBC-MAC算法从块密码算法的CBC分组模式演变而来,简单地说就是最后一个密文分组的值就是MAC值。 HMAC(Hash-based Message Authentication Code)算法使用Hash算法作为加密基元&am…...
DAY168内网对抗-基石框架篇单域架构域内应用控制成员组成用户策略信息收集环境搭建
知识点: 1、基石框架篇-单域架构-权限控制-用户和网络 2、基石框架篇-单域架构-环境搭建-准备和加入 3、基石框架篇-单域架构-信息收集-手工和工具 1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的资源,只要在“…...
如何实现 3D GPR的仿真模拟
通过ai问题生成得到的。 1 模型文件-MATLAB 在gprmax中模拟3D GPR工作,可以通过编写一个MATLAB脚本来创建几何文件,并使用gprmax的输入文件(in文件)来设置模拟参数。以下是一个简单的例子程序,展示了如何创建一个3D …...
k8s 之 Deployment
(1)Deployment 作用是确保 Pod 副本数量,能够保证 Pod 数量与期望值一样,会有自恢复功能。简洁地说:具有 水平扩展 / 收缩 功能。 可能好奇的是在 kubernetes 中是谁在执行这些控制器的,它就是 kube-contr…...
现代C++ 6 声明
文章目录 C 中的冲突声明规则1. **对应声明(Corresponding Declarations)**2. **对应函数重载(Corresponding Function Overloads)**3. **对应函数模板重载(Corresponding Function Template Overloads)**4…...
Spark区分应用程序 Application、作业Job、阶段Stage、任务Task
目录 一、Spark核心概念 1、应用程序Application 2、作业Job 3、阶段Stage 4、任务Task 二、示例 一、Spark核心概念 在Apache Spark中,有几个核心概念用于描述应用程序的执行流程和组件,包括应用程序 Application、作业Job、阶段Stage、任务Task…...
【WebRTC】Android SDK使用教学
文章目录 前言PeerConnectionFactoryPeerConnection 前言 最近在学习WebRTC的时候,发现只有JavaScript的API文档,找了很久没有找到Android相关的API文档,所以通过此片文章记录下在Android应用层如何使用WebRTC 本篇文章结合:【W…...
算法-字符串-8.字符串转换整数
一、题目 二、思路解析 1.思路: 依次遍历,查看当前字符是否在规定范围内 2.常用方法: 1.trim(),去字符串的首尾空字符 ss.trim(); 2.substring(beginIndex),截断字符串,得到新的字符串是[1,s.length()-1] ss.substring(1); 3.st…...
普通算法——一维前缀和
一维前缀和 题目链接:https://www.acwing.com/problem/content/797/ 题目描述: 输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。 **什么是…...
【Elasticsearch】ES+MySQL实现迷糊搜索
1. 技术选型 使用 Elasticsearch (ES) 结合 MySQL 进行数据存储和查询,而不是直接从 MySQL 中进行查询,主要是为了弥补传统关系型数据库(如 MySQL)在处理大规模、高并发和复杂搜索查询时的性能瓶颈。具体来说,ES 与 My…...
MacOS编译webRTC源码小tip
简单记录一下,本人在编译webRTC时,碰到了一下比较烦人的问题,在MacOS终端下,搭建科学上网之后,chromium的depot_tools仓库成功拉下来了,紧接着,使用fetch以及gclient sync始终都返回curl相关的网…...
Android显示系统(05)- OpenGL ES - Shader绘制三角形(使用glsl文件)
Android显示系统(02)- OpenGL ES - 概述 Android显示系统(03)- OpenGL ES - GLSurfaceView的使用 Android显示系统(04)- OpenGL ES - Shader绘制三角形 Android显示系统(05)- OpenGL…...
深度学习小麦头检测-基于Faster-RCNN的小麦头检测——附项目源码
比赛描述 为了获得有关全世界麦田的大量准确数据,植物科学家使用“小麦头”(包含谷物的植物上的穗)的图像检测。这些图像用于估计不同品种的小麦头的密度和大小。但是,在室外野外图像中进行准确的小麦头检测可能在视觉上具有挑战性。密集的小麦植株经常重叠,并且风会使照片…...
成像报告撰写格式
成像报告撰写格式 实验人员: 实验时间: 实验地点: 实验目的: 1实验仪器 1.1相机 包括制造商,型号,面阵还是线阵,彩色还是黑白,图像尺寸,光学接口等。 1.2镜头 包…...
【数学建模】线性规划问题及Matlab求解
问题一 题目: 求解下列线性规划问题 解答: 先将题目中求最大值转化为求最小值,则有 我们就可以得到系数列向量: 我们对问题中所给出的不等式约束进行标准化则得到了 就有不等式约束条件下的变系数矩阵和常系数矩阵分别为: 等式…...
C# 事件(Event)
文章目录 前言1、 声明委托2、 声明事件3、 触发事件4、订阅和取消订阅事件5、示例展示示例一:基础的事件使用流程示例二:简单数值变化触发事件示例三:锅炉系统相关事件应用 前言 在 C# 中,事件(Event)是一…...
企业数字化转型:从爆品起步,迈向生态平台
在当今数字化浪潮席卷全球的时代,企业数字化转型已成为必然趋势。然而,这条转型之路该如何走呢? 企业数字化转型的路径设计,绝不仅仅是技术的升级换代,它需要综合考量多方面因素。一方面,要为实现战略目标做…...
Windows 安装 MySQL
1.下载 MySQL 安装包 访问:MySQL :: Download MySQL Installer选择适合的版本。推荐下载 MySQL Installer for Windows,该安装包包含所有必要的组件选择 Windows (x86, 32-bit), MSI Installer 或 Windows (x86, 64-bit), MSI Installer 2.运行安装程序…...
游戏引擎学习第37天
仓库 : https://gitee.com/mrxiao_com/2d_game 回顾目前的进展 一个简单的调试工具——位图加载器,用于加载存储在硬盘上的位图文件。这个工具将文件加载到内存中,并查看文件头部信息,确保其正确性。接着使用位图头中的偏移量来获取像素数据…...
非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 4
三十三、出入库管理 Header.vue导一下,RecordController加一个 //将入库数据和原有数据相加吧//新增PostMapping("/save")public Result save(RequestBody Record record) {return recordService.save(record) ? Result.success() : Result.fail();} GoodsManage.v…...
知乎Java后台开发面试题及参考答案
请简述 TCP 的三次握手和四次挥手过程。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 三次握手过程 首先,客户端想要建立连接,会发送一个带有 SYN(同步序列号)标志的 TCP 报文段,这个报文段中还包含一个初始序列号(ISN,Initial Sequenc…...
Java中的String类用法详解
1.字符串拆分 可以把一个完整的字符串按照规定的分隔符拆分为若干个子字符串 String[] split(String regex) 将字符串全部拆分 String[] split(String regex,int limit) 将字符串以指定的格式拆分,拆分成limit组 实例:字符串的拆分处理 public class Main4 {public stat…...
mac电脑安装hadoop、hive等大数据组件
背景:用本地的Hadoop测试Java调用cmd命令 2024-12-08 13:48:19,826 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable ls: .: No such file or directory解决方案:…...
DHCP和DNS
DHCP(动态主机配置协议)和DNS(域名系统)是计算机网络中两个重要的协议,它们在网络的管理和使用中发挥着关键作用。 DHCP(动态主机配置协议) 基本功能 自动分配IP地址:DHCP允许网…...
Postman安装使用教程
Postman(接口测试工具) ①、介绍 Postman是一款支持http协议的接口调试与测试工具,它不仅可以调试简单的css、html、脚本等简单的网页基本信息,还可以发送几乎所有类型的HTTP请求。 ②、安装 Ⅰ、运行安装包/官网直搜 Ⅱ、创建…...
剖析千益畅行,共享旅游-卡,合规运营与技术赋能双驱下的旅游新篇
在数字化浪潮席卷各行各业的当下,旅游产业与共享经济模式深度融合,催生出旅游卡这类新兴产品。然而,市场乱象丛生,诸多打着 “共享” 幌子的旅游卡弊病百出,让从业者与消费者都深陷困扰。今天,咱们聚焦技术…...
信创改造-达梦数据库配置项 dm.ini 优化
设置模式:兼容MySQL,COMPATIBLE_MODE 4 内存占比:90%,MAX_OS_MEMORY 90 目标内存:2G(不影响申请内存超过2G,但这部分内存不会回收),MEMORY_TARGET 2000 参考 https:…...
docker入门 自记录
1.先自己下载离线bao .tar 或者 自己pull docker pull xxx 如果遇到网络问题就换源 2.之后run一个docker 后面是映射本地路径 sudo docker run -it --name ultralytics_241124 --gpus all --shm-size 8G -v /home/oppenheim/detect/train241204/docker:/home/docker ultralyti…...
Axure设计之动态图表——排名图(中继器)
粉丝问我可不可以用中继器做条形图,而且是要做成自动增长的排名图表。所以现在教大家怎么用axure来制作制作排名图。 这个原型制作完成之后,后期有类似的功能,直接拿过去使用也比较简单,基本只需要修改中继器数据就可以了。喜欢、…...
在Java中几种常用数据压缩算法的实现及其优劣势
在Java中几种常用数据压缩算法的实现及其优劣势 背景:项目需要引入Redis作为缓存组件,需要考虑到Redis的内存占用(机器内存越大,成本越高),因此需要引入数据压缩。 1、介绍 数据压缩是计算机领域中一项重要…...