上位机开发-PyQt5

news/2024/5/17 6:13:03
  • PyQt是一套Python的GUI开发框架,即图形用户界面开发框架

  • 其中PyQt是Qt(C++语言实现的)为Python专门提供的扩展

  • PySide官网:Qt for Python

  • 插件安装

pip install 插件名字	# 安装
pip uninstall 插件名字	# 卸载
pip install 插件名字 -i 指定下载的镜像网址
pip show 插件名字		# 查看插件名字# 安装PyQt5
pip  install  PyQt5  -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装Qt工具软件
pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装PyQt5语法检测包(可选)
pip install PyQt5-stubs -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装PyQt5帮助文档(可选)
pip install PyQtdoc -i https://pypi.tuna.tsinghua.edu.cn/simple
# 查看安装版本
pip  show  PyQt5
pip  show  PyQt5-tools
pip  show  PyQt5-stubs

第一个Qt程序

第一个Qt窗口

0. 导入模块
1.创建应用程序
2.创建窗口

3.显示窗口
4.等待窗口停止

from PyQt5.QtWidgets import *
import sys# 程序入口
app = QApplication()
# 设置窗口
w = QWidget()# 展示
w.show()
# 等待关闭
sys.exit(app.exec())

窗口相关设置

设置窗口标题
设置窗口尺寸
设置图标
鼠标停留在控件上时就会显示ToolTip的信息


import sys# 导包 模块
from PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)# 创建窗口
w = QWidget()# 设置标题
w.setWindowTitle("QQ开发版")
# 窗口大小
w.resize(800, 600)
# 设置气泡提示w.setToolTip("这是一个窗口")# 展示
w.show()# 等待中止
sys.exit(app.exec_())

常用控件

1. 标签 QLabel 

显示文字

创建QLabel标签对象
设置文本内容
指定主窗口为父对象,标签放在主窗口上

import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
#
# #后续的创建按钮 文本 图像 等等 都是放到这里
# 显示文字
# 创建QLabel标签对象
label = QLabel()
# 设置文本内容
label.setText("Hello 你好呀")
label.move(100,100)
print(label.text())
# 指定主窗口为父对象,标签放在主窗口上
label.setParent(w)# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

显示图片

创建QLabel标签对象
创建QPixmap对象
设置标签图片
指定主窗口为父对象,标签放在主窗口上
根据图片大小设置窗口大小


import sysfrom PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()pixmap = QPixmap("img/img.png")#设置程序的icon
#windows 设置
w.setWindowIcon(QIcon(pixmap))# 创建QLabel标签对象label = QLabel()
# 创建QPixmap对象
pixmap = QPixmap("img/img.png")
# 设置标签图片
label.setPixmap(pixmap)
# 指定主窗口为父对象,标签放在主窗口上
label.setParent(w)
# 根据图片大小设置窗口大小
w.resize(pixmap.width(), pixmap.height())# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

2. 输入框

单行输入框 QLineEdit

创建QLineEdit对象
设置默认提示语
设置内容为"hello world"
设置最大输入的长度
获取文本内容
设置输入框的回显模式:密码模式
指定父对象

import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()# 创建QLineEdit对象
edit = QLineEdit()
# 设置默认提示语
edit.setPlaceholderText("请输入你的银卡卡账号:")
# 设置内容为"hello world"
edit.setText("9527")
# 设置最大输入的长度
edit.setMaxLength(10)
# 获取文本内容
print(edit.text())
#
# 设置输入框的回显模式:密码模式
edit.setEchoMode(edit.Password)
# 指定父对象
edit.setParent(w)
# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

多行输入框 QTextEdit

创建QTextEdit对象
设置提示内容
设置默认内容
设置内容
获取内容
清空内容
指定父对象

import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QTextEdit对象
txt = QTextEdit()
# 设置提示内容
txt.setPlaceholderText("请输入你的履历")
# 设置默认内容
txt.setText("Hello world")
# 设置内容
txt.setText("Hello")
# 获取内容
print(txt.toPlainText())
# 清空内容
txt.clear()
# 指定父对象
txt.setParent(w)# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

3. 按钮 QPushButton

创建QPushButton对象
设置按钮的文本内容
获取按钮的文本内容
指定父对象


import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QPushButton对象
btn = QPushButton()
# 设置按钮的文本内容
btn.setText('点击抽奖')
# 获取按钮的文本内容
print(btn.text())
# 指定父对象
btn.setParent(w)# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

4. 信号和槽

1. 按钮的信号与槽

  • 某些控件(部件)按下了,产生一个信号(事件)(理解为硬件的中断,实际上是软件层的中断)

  • 信号来了,处理信号对应的槽函数

  • 步骤

    • 1)要处理什么信号

    • 2)信号绑定的(连接的)对应槽函数

    • 3)定义槽函数(普通函数)

2. 系统的信号和槽函数

按钮被点击了,调用关闭窗口的槽函数

import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QPushButton对象
btn = QPushButton()
# 设置按钮的文本内容
btn.setText('点击抽奖')
# 获取按钮的文本内容
print(btn.text())
# 指定父对象
btn.setParent(w)def func():print("中奖五百万!")# 方式1:自定义槽函数
btn.clicked.connect(func)# 方式2:槽函数为匿名函数
#关闭窗口
btn.clicked.connect(w.close)# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

布局 layout

1. 横向布局 QHBoxLayout

创建QHBoxLayout对象
添加5个QPushButton控件
窗口添加布局


import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QHBoxLayout对象
layout = QHBoxLayout()
# 添加5个QPushButton控件
btn1 = QPushButton("按钮1")
btn2 = QPushButton("按钮2")
btn3 = QPushButton("按钮3")
btn4 = QPushButton("按钮4")
btn5 = QPushButton("按钮5")
text = QLineEdit()#按钮添加到布局中
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)
layout.addWidget(btn4)
layout.addWidget(btn5)
layout.addWidget(text)# 窗口添加布局  setLayout
w.setLayout(layout)
# btn1.move(50,50)
# btn2.move(80,80)
# btn3.move(100,100)
# btn4.move(150,150)
# btn1.setParent(w)
# btn2.setParent(w)
# btn3.setParent(w)
# btn4.setParent(w)
# btn5.setParent(w)
w.resize(800,600)# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

2. 纵向布局 QVBoxLayout

创建QVBoxLayout对象
添加5个QPushButton控件
窗口添加布局

import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QHBoxLayout对象
layout = QVBoxLayout()
# 添加5个QPushButton控件
btn1 = QPushButton("按钮1")
btn2 = QPushButton("按钮2")
btn3 = QPushButton("按钮3")
btn4 = QPushButton("按钮4")
btn5 = QPushButton("按钮5")
text = QLineEdit()#按钮添加到布局中
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)
layout.addWidget(btn4)
layout.addWidget(btn5)
layout.addWidget(text)# 窗口添加布局  setLayout
w.setLayout(layout)w.resize(800,600)# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

3. 表单布局 QFormLayout


import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 设置 form layout
form = QFormLayout()# 创建用户名QLineEdit对象  单行文本
user = QLineEdit()
# 创建密码QLineEdit对象
pwd = QLineEdit()
# 密码QLineEdit对象设置密码属性
pwd.setEchoMode(pwd.Password)
# 创建手机号QLineEdit对象
tel = QLineEdit()# 创建QPushButton对象
btn = QPushButton("注册信息")
# QFormLayout对象添加addRow用户名、密码、手机号控件
# QFormLayout对象添加addRow按钮
form.addRow("用户名:", user)
form.addRow("密 码:",pwd)
form.addRow("手机号:",tel)
# form.addRow("注册",btn)
form.addRow("",btn)#将layout设置到窗口
w.setLayout(form)
# 槽函数on_submit实现功能:分别获取用户名、密码、手机号文本内容
def on_submit():print(user.text(),pwd.text(),tel.text())# QPushButton对象信号clicked绑定自定义槽函数on_submitbtn.clicked.connect(on_submit)# w.resize(640,480)
# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

4. 嵌套布局

# 创建QHBoxLayout对象h_layout
# 创建QVBoxLayout对象v_layout1,添加一个QPushButton对象1
# h_layout添加v_layout1对象
# 创建QVBoxLayout对象v_layout2,添加QPushButton对象2, QPushButton对象3
# h_layout添加v_layout2对象
# 创建QVBoxLayout对象v_layout3,添加QPushButton对象4, QPushButton对象5, QPushButton对象6
# h_layout添加v_layout3对象
# 创建QVBoxLayout对象v_layout4,添加QPushButton对象7, QPushButton对象8, QPushButton对象9, QPushButton对象10
# h_layout添加v_layout4对象
# 窗口添加布局h_layout


import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QHBoxLayout对象h_layout (整个水平布局)
h_layout = QHBoxLayout()# 创建QHBoxLayout对象v_layout1,添加一个QPushButton对象1  整个水平布局中的第一个水平布局layout1
v_layout1 = QHBoxLayout()
btn1 = QPushButton("btn1")
btn2 = QPushButton("按钮1")
v_layout1.addWidget(btn1)
v_layout1.addWidget(btn2)
# h_layout添加v_layout1对象
h_layout.addLayout(v_layout1)
# 创建QVBoxLayout对象v_layout2,添加QPushButton对象2, QPushButton对象3
v_layout2 = QVBoxLayout()
v_layout2.addWidget(QPushButton("btn2"))
v_layout2.addWidget(QPushButton("btn3"))
# h_layout添加v_layout2对象
h_layout.addLayout(v_layout2)
# 创建QVBoxLayout对象v_layout3,添加QPushButton对象4, QPushButton对象5, QPushButton对象6
v_layout3 = QVBoxLayout()
v_layout3.addWidget(QPushButton("btn4"))
v_layout3.addWidget(QPushButton("btn5"))
v_layout3.addWidget(QPushButton("btn6"))
# h_layout添加v_layout3对象
h_layout.addLayout(v_layout3)
# 创建QVBoxLayout对象v_layout4,添加QPushButton对象7, QPushButton对象8, QPushButton对象9, QPushButton对象10
v_layout4 = QVBoxLayout()
v_layout4.addWidget(QPushButton("按钮7"))
v_layout4.addWidget(QPushButton("按钮8"))
v_layout4.addWidget(QPushButton("按钮9"))
v_layout4.addWidget(QPushButton("按钮10"))
# h_layout添加v_layout4对象
h_layout.addLayout(v_layout4)
# 窗口添加布局h_layout
w.setLayout(h_layout)# 显示窗口
w.show()
w.resize(800,600)
# 等待中止
sys.exit(app.exec_())

对话框

1. 消息对话框 QMessageBox

# 创建QPushButton对象btn
# btn信号clicked绑定槽函数
# 槽函数中弹出消息QMessageBox对话框,并设置消息对话框的标题、内容、按钮,选择对话框后做出响应判断
# btn指定父对象

import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QPushButton对象
btn = QPushButton()
# 设置按钮的文本内容
btn.setText('点击抽奖')
# 获取按钮的文本内容
print(btn.text())
# 指定父对象
btn.setParent(w)# 创建QPushButton对象btn
# btn信号clicked绑定槽函数def btn_click():res =   QMessageBox.information(w, '中奖信息',"请确认协议内容",QMessageBox.Yes|QMessageBox.No)if res == QMessageBox.Yes:print("ok")
# 槽函数中弹出消息QMessageBox对话框,并设置消息对话框的标题、内容、按钮,选择对话框后做出响应判断
# btn指定父对象
btn.clicked.connect(btn_click)# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

2. 输入对话框 QInputDialog

# 创建QVboxLayout对象layout
# 创建QLabel对象label
# label设置内容"匿名"
# layout添加label
# 创建QPushButton对象btn
# btn设置内容"创建角色"
# layout添加btn
# btn的信号clicked连接槽函数show_dialog
# 槽函数中创建QInputDialog对象,获取用户输入的内容,给label设置内容
# 窗口添加布局

import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()# 创建QVboxLayout对象layout
layout = QVBoxLayout()
# 创建QLabel对象label
label = QLabel()
# label设置内容"匿名"
label.setText("匿名")
# layout添加label
layout.addWidget(label)
# 创建QPushButton对象btn
btn = QPushButton()
# btn设置内容"创建角色"
btn.setText("创建角色")
# layout添加btn
layout.addWidget(btn)# btn的信号clicked连接槽函数show_dialog
def show_dialog():res, flag = QInputDialog.getText(w, "标题", "请创建角色")if flag:print("创建角色成功:", res)btn.clicked.connect(show_dialog)
# 槽函数中创建QInputDialog对象,获取用户输入的内容,给label设置内容
# 窗口添加布局
w.setLayout(layout)# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

单复选框

1. 单选框 QRadioButton

# 创建QRadioButton对象btn1,设置内容"男"
# 创建QRadioButton对象btn2,设置内容"女"
# 设置btn2为选中状态
# 创建QButtonGroup对象group,将btn1和btn2添加到group
# group的信号buttonToggled连接槽函数on_group_toggled
# 槽函数参数为QRadioButton对象,里面打印被按下按钮的文本,打印选中状态
# 创建VBoxLayout对象layout,将btn1和btn2添加到layout
# 窗口添加布局


import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()# 创建VBoxLayout对象layout,将btn1和btn2添加到layout
layout = QHBoxLayout()
# 创建QRadioButton对象btn1,设置内容"男"
radio = QRadioButton("男")
# 创建QRadioButton对象btn2,设置内容"女"
radio2 = QRadioButton("女")
# 设置btn2为选中状态
radio2.setChecked(True)# group的信号buttonToggled连接槽函数on_group_toggled
# 槽函数参数为QRadioButton对象,里面打印被按下按钮的文本,打印选中状态
# 创建VBoxLayout对象layout,将btn1和btn2添加到layout
layout.addWidget(radio)
layout.addWidget(radio2)
# 窗口添加布局
w.setLayout(layout)#定义槽函数
def on_toggled():if radio.isChecked():print("男被选中")if radio2.isChecked():print("女被选中")#信号绑定
radio.toggled.connect(on_toggled)
radio2.toggled.connect(on_toggled)# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

2. 复选框 QCheckButton

# 创建QCheckBox对象box1,并设置文本为“学习”
# 创建QCheckBox对象box2,并设置文本为“睡觉”
# 创建QCheckBox对象box3,并设置文本为“工作”
# box1、box2、box3的信号statusChanged和槽函数box_slot绑定
# 槽函数判断是否被选中
# 创建QHBoxLayout对象layout,并添加box1、box2、box3
# 窗口添加布局

import sysfrom PyQt5.QtWidgets import *# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建VBoxLayout对象layout,将btn1和btn2添加到layout
layout = QHBoxLayout()
#创建复选框box1 = QCheckBox("语文")
box2 = QCheckBox("数学")
box3 = QCheckBox("英语")layout.addWidget(box1)
layout.addWidget(box2)
layout.addWidget(box3)# 槽函数判断是否被选中
def box_slot():if box1.isChecked():print("今天上语文课")if box2.isChecked():print("下节课上数学")if box3.isChecked():print("下节课上英语")# box1、box2、box3的信号statusChanged和槽函数box_slot绑定
box1.stateChanged.connect(box_slot)
box2.stateChanged.connect(box_slot)
box3.clicked.connect(box_slot)# 窗口添加布局
w.setLayout(layout)#定义槽函数# 显示窗口
w.show()# 等待中止
sys.exit(app.exec_())

pyQt面向对象开发

类名:MyWidget继承QWidget
实例方法:
    __init__(self, parent=None): 调用父类的__init__(parent)方法,调用初始化窗口
    init_ui(): 窗口控件的添加、布局、信号和槽处理

程序入口:
    # 1.创建应用程序
    # 2.创建窗口
    # 3.显示窗口
    # 4.等待窗口停止


import sysfrom PyQt5.QtWidgets import *# 定义我们的widget类
class myWidget(QWidget):def __init__(self, parent=None):super().__init__(parent)#     调用init_UIself.init_ui()def init_ui(self):'''初始化ui:return:'''# self.setWindowTitle("设置标题")if __name__ == '__main__':# 创建程序appapp = QApplication(sys.argv)w = myWidget()w.show()sys.exit(app.exec_())

http://www.mrgr.cn/p/01465207

相关文章

vue.js 3 初学经验:开发环境搭建,Windows,nginx

Windows 11 nginx-1.20.0 "vue": "^3.4.21" ---序章 vue3 开发,不需要后端服务业是可以的。 在需要后端服务时,使用 nginx 来转发请求是很好的(个人开发者)。注,还有什么其它方式吗? 注,本文的后端服务 是使用 Java 开发的 HTTP 接口。 注,参考资料…

怎么给字符串字段加索引?

怎么给字符串字段加索引? 现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。 假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: …

使用图集Atlas创建Fnt文件的工具

fnt文件生成unity字体的原理其实就是渲染图集Atlas上的Sprite,这边直接利用Unity自带的图集工具生成fnt文件 注意:这里生成的fnt文件还没发直接用,因为没有关联字符,这个工具只是第1步,要配合Fnt编辑工具一起使用 public class SpriteToFntTool : EditorWindow {[MenuItem…

ffmpeg与sdl的个人笔记

说明 这里的ffmpeg基础知识和sdl基础知识仅提及与示例代码相关的知识点, 进阶可学习雷神的博客。 https://blog.csdn.net/leixiaohua1020 当然,如代码写的有问题或有更好的见解,欢迎指正! 音视频基础知识 在学习音视频理论知识时&#xff…

Spirng 当中 Bean的作用域

Spirng 当中 Bean的作用域 @目录Spirng 当中 Bean的作用域每博一文案1. Spring6 当中的 Bean的作用域1.2 singleton 默认1.3 prototype1.4 Spring 中的 bean 标签当中scope= 属性其他的值说明1.5 自定义作用域,一个线程一个 Bean2. 总结:3. 最后:每博一文案 青年,青年!无论受…

EyeDropper 拾色器

EyeDropperEyeDropper:拾色器,从屏幕上选择颜色 需要用户交互操作<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0&…

装饰器模式【结构型模式C++】

1.概述 装饰器模式是一种结构型设计模式&#xff0c; 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 2.结构 抽象构件&#xff08;Component&#xff09;角色&#xff1a;定义一个抽象接口以规范准备接收附加责任的对象。具体构件&#xff08;Concre…

分布式系统事务一致性解决方案(基于事务消息)

参考&#xff1a;https://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/ 文章目录 概要错误的方案方案一&#xff1a;业务方自己实现方案二&#xff1a;RocketMQ 事务消息什么是事务消息事务消息处理流程事务消息生命周期使用限制使用示例使用建议 概要 …

二叉树笔试题解题思路

数据结构 二叉树 笔试题:解题思路: 1.判断是否为空树,若为空树,则返回0; 2.定义两个指针备份根结点地址,定义两个整型变量a,b并初始化为0,记录左右子树的深度;先对根结点的左子树进行遍历,若根结点的左结点不为NULL,则a++,把根结点的左结点赋值为新的根结点,再进行…

树(tree) [一]

树的概念和原理,以及二叉树的分类和重要性质。树(tree) [一] 基本概念: ​ 日常生活中,很多数据的组织形式本质上是一棵树。比如一个公司中的职员层级关系、一个学校中的院系层级关系、淘汰赛中的各次比赛队伍、一个家族中的族谱成员关系等都是树状逻辑结构。由于树状结构表…

C++核心编程——4.5 运算符重载

4.5.0 运算符重载概念 对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型&#xff0c;对应的各类型重载如下表所示。 成员函数重载&#xff08;写在类内&#xff09;全局函数重载加号 Person operator(const Person& p) { …

不同语言在算法使用方面的差异(Java 、C++篇)

由于我认为的会了是能得到结果了&#xff0c;所以我亲自去把题解的C代码给改成了Java的&#xff0c;尽管代码和逻辑上的高度统一。编译器还是报错了。 第三个死都过不去。而且后面的还超时了。 这使我十分怀疑是不是超时或者空间不够所导致的。但是去问讯飞星火&#xff0c;它…

ElasticSearch教程入门到精通——第一部分(基于ELK技术栈elasticsearch 8.x新特性)

ElasticSearch教程入门到精通——第一部分&#xff08;基于ELK技术栈elasticsearch 8.x新特性&#xff09; 1. ElasticSearch安装&#xff08;略&#xff09;2. ElasticSearch基础功能2.1 索引操作2.1.1 创建索引2.1.2 Head 索引2.1.3 查询索引2.1.3.1 查询单独索引2.1.3.2 查询…

SQL SERVER 从入门到精通 第5版 第三篇 高级应用 第11章 触发器 读书笔记

第11章 触发器>.概述触发器是一种特殊类型的存储过程.当指定表中的数据发生变化时触发器自动生效.它与表紧密相连,可以看作表定义的一部分.触发器不能通过名称被直接调用,更不允许设置参数.在SQL SERVER 中,一张表可以有多个触发器.用户可以使用INSERT,UPDATE或者DELETE语句…

机器学习理论基础—聚类算法

机器学习理论基础—聚类算法 聚类的距离计算 聚类&#xff1a;物以类聚。将相似的样本聚集到一起&#xff0c;使得同一类簇的样本尽可能接近,不同类簇的样本尽可能远离。&#xff08;无监督算法&#xff09; 对于距离的定义&#xff1a;满足下面的四个特点 非负性同一性对称性…

达梦(DM) SQL日期操作及分析函数

达梦DM SQL日期操作及分析函数 日期操作SYSDATEEXTRACT判断一年是否为闰年周的计算确定某月内第一个和最后一个周末某天的日期确定指定年份季度的开始日期和结束日期补充范围内丢失的值按照给定的时间单位查找使用日期的特殊部分比较记录 范围处理分析函数定位连续值的范围查找…

CSS Counter Styles

CSS Counter Styles允许您自动对 HTML 文档中的元素进行编号或标记。我们定义一个具有特定名称和起始值的 counter,然后根据 CSS 规则递增或递减该计数器。使用 counter-reset 属性定义计数器,设置其起始值,然后使用 counter-increment 属性根据需要递增或递减计数器。还可以…

Unity打开Android文件管理器并加载文件

1、在AssetStore商店中加入免费插件 2、调用代码 3、使用UnityWebRequest加载路径数据