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

PyQt5-小总结

之前学习PyQt5,然后那段时间想做一个桌面小程序,后来由于学习内容较多就做了一小部分,但是可以进行页面跳转。大家如果是初学者对Python感兴趣而且刚学数据库时可以看看代码,可能会有点启发。

效果:

 登录进来是这:

 

 实现了账号密码的增删改功能

结构很简单

源代码如下:

database.py

import pymysql # 导入操作MySQL数据库的模块userName="" # 记录用户名# 打开数据库连接
def open():db = pymysql.connect(host="localhost", user="root", passwd="123456", database="db_goods",charset="utf8")return db # 返回连接对象#数据库增删改
def exec(sql,values):db=open() # 连接数据库cursor = db.cursor() # 使用cursor()方法获取操作游标try:cursor.execute(sql,values) # 执行增删改的SQL语句db.commit() # 提交数据return 1 # 执行成功except:db.rollback() # 发生错误时回滚return 0 # 执行失败finally:cursor.close() # 关闭游标db.close() # 关闭数据库连接
# 带参数的精确查询
def query(sql,*keys):db=open() # 连接数据库cursor = db.cursor() # 使用cursor()方法获取操作游标cursor.execute(sql,keys) # 执行查询SQL语句result = cursor.fetchall() # 记录查询结果cursor.close() # 关闭游标db.close() # 关闭数据库连接return result # 返回查询结果
# 不带参数的模糊查询
def query2(sql):db=open() # 连接数据库cursor = db.cursor() # 使用cursor()方法获取操作游标cursor.execute(sql) # 执行查询SQL语句result = cursor.fetchall() # 记录查询结果cursor.close() # 关闭游标db.close() # 关闭数据库连接return result # 返回查询结果

图片要放在这种文件里

<RCC><qresource prefix="newPrefix"><file>images/loginPIC.jpg</file><file>images/main.jpg</file></qresource>
</RCC>

 需要用到这个工具,大家自己查一下,很容易配置

login.py

#login.py
from PyQt5 import QtCore, QtGui, QtWidgets
import dataBase
from PyQt5.QtWidgets import QMessageBox
import main
from PyQt5.QtWidgets import *class Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)MainWindow.resize(485, 280)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(0, 0, 261, 281))self.label.setPixmap(QtGui.QPixmap(":/newPrefix/images/loginPIC.jpg"))self.label.setObjectName("label")self.label_user = QtWidgets.QLabel(self.centralwidget)self.label_user.setGeometry(QtCore.QRect(270, 70, 72, 41))self.label_user.setObjectName("label_2")self.label_pwd = QtWidgets.QLabel(self.centralwidget)self.label_pwd.setGeometry(QtCore.QRect(270, 130, 72, 21))self.label_pwd.setObjectName("label_3")self.lineEdit_userName = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_userName.setGeometry(QtCore.QRect(330, 80, 113, 21))self.lineEdit_userName.setObjectName("lineEdit")self.lineEdit_userPasswd = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_userPasswd.setGeometry(QtCore.QRect(330, 130, 113, 21))self.lineEdit_userPasswd.setObjectName("lineEdit_2")self.lineEdit_userPasswd.setEchoMode(QtWidgets.QLineEdit.Password)self.pushButton_login = QtWidgets.QPushButton(self.centralwidget)self.pushButton_login.setGeometry(QtCore.QRect(290, 190, 61, 28))self.pushButton_login.setObjectName("pushButton")self.pushButton_exit = QtWidgets.QPushButton(self.centralwidget)self.pushButton_exit.setGeometry(QtCore.QRect(370, 190, 61, 28))self.pushButton_exit.setObjectName("pushButton_2")MainWindow.setCentralWidget(self.centralwidget)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)self.pushButton_exit.clicked.connect(MainWindow.close)  # 关闭登录窗体self.pushButton_login.clicked.connect(self.openMain)   #登录def openMain(self):dataBase.userName = self.lineEdit_userName.text()userPasswd = self.lineEdit_userPasswd.text()if dataBase.userName and userPasswd:result = dataBase.query("select * from goods_user where userName = %s and userPasswd = %s", dataBase.userName, userPasswd)if len(result) > 0:self.main_window = QtWidgets.QMainWindow()self.main_ui = main.Ui_MainWindow()self.main_ui.setupUi(self.main_window)self.main_window.show()MainWindow.hide()else:self.lineEdit_userName.setText("")self.lineEdit_userPasswd.setText("")QMessageBox.warning(None, '警告', '请输入正确的用户名和密码!', QMessageBox.Ok)else:QMessageBox.warning(None, '警告', '请输入用户名和密码!', QMessageBox.Ok)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "二手商品信息管理平台登录"))self.label_user.setText(_translate("MainWindow", "用户名:"))self.label_pwd.setText(_translate("MainWindow", "密  码:"))self.pushButton_login.setText(_translate("MainWindow", "登录"))self.pushButton_exit.setText(_translate("MainWindow", "退出"))import img_rc
import sysif __name__ == '__main__':app = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())

main.py

#login.py
from PyQt5 import QtCore, QtGui, QtWidgets
import dataBase
from PyQt5.QtWidgets import QMessageBox
import main
from PyQt5.QtWidgets import *class Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)MainWindow.resize(485, 280)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(0, 0, 261, 281))self.label.setPixmap(QtGui.QPixmap(":/newPrefix/images/loginPIC.jpg"))self.label.setObjectName("label")self.label_user = QtWidgets.QLabel(self.centralwidget)self.label_user.setGeometry(QtCore.QRect(270, 70, 72, 41))self.label_user.setObjectName("label_2")self.label_pwd = QtWidgets.QLabel(self.centralwidget)self.label_pwd.setGeometry(QtCore.QRect(270, 130, 72, 21))self.label_pwd.setObjectName("label_3")self.lineEdit_userName = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_userName.setGeometry(QtCore.QRect(330, 80, 113, 21))self.lineEdit_userName.setObjectName("lineEdit")self.lineEdit_userPasswd = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_userPasswd.setGeometry(QtCore.QRect(330, 130, 113, 21))self.lineEdit_userPasswd.setObjectName("lineEdit_2")self.lineEdit_userPasswd.setEchoMode(QtWidgets.QLineEdit.Password)self.pushButton_login = QtWidgets.QPushButton(self.centralwidget)self.pushButton_login.setGeometry(QtCore.QRect(290, 190, 61, 28))self.pushButton_login.setObjectName("pushButton")self.pushButton_exit = QtWidgets.QPushButton(self.centralwidget)self.pushButton_exit.setGeometry(QtCore.QRect(370, 190, 61, 28))self.pushButton_exit.setObjectName("pushButton_2")MainWindow.setCentralWidget(self.centralwidget)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)self.pushButton_exit.clicked.connect(MainWindow.close)  # 关闭登录窗体self.pushButton_login.clicked.connect(self.openMain)   #登录def openMain(self):dataBase.userName = self.lineEdit_userName.text()userPasswd = self.lineEdit_userPasswd.text()if dataBase.userName and userPasswd:result = dataBase.query("select * from goods_user where userName = %s and userPasswd = %s", dataBase.userName, userPasswd)if len(result) > 0:self.main_window = QtWidgets.QMainWindow()self.main_ui = main.Ui_MainWindow()self.main_ui.setupUi(self.main_window)self.main_window.show()MainWindow.hide()else:self.lineEdit_userName.setText("")self.lineEdit_userPasswd.setText("")QMessageBox.warning(None, '警告', '请输入正确的用户名和密码!', QMessageBox.Ok)else:QMessageBox.warning(None, '警告', '请输入用户名和密码!', QMessageBox.Ok)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "二手商品信息管理平台登录"))self.label_user.setText(_translate("MainWindow", "用户名:"))self.label_pwd.setText(_translate("MainWindow", "密  码:"))self.pushButton_login.setText(_translate("MainWindow", "登录"))self.pushButton_exit.setText(_translate("MainWindow", "退出"))import img_rc
import sysif __name__ == '__main__':app = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())

user.py

#user.py
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox, QTableWidgetItem, QMainWindowimport dataBaseclass Ui_MainWindow(QMainWindow):# 构造方法def __init__(self):super(Ui_MainWindow, self).__init__()self.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)  # 只显示最小化和关闭按钮self.setupUi(self) # 初始化窗体设置def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(546, 423)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.tableinfo = QtWidgets.QTableWidget(self.centralwidget)self.tableinfo.setGeometry(QtCore.QRect(0, 0, 400, 420))self.tableinfo.setObjectName("tableWidget")self.tableinfo.setColumnCount(2)self.tableinfo.setRowCount(0)item = QtWidgets.QTableWidgetItem()item.setTextAlignment(QtCore.Qt.AlignCenter)self.tableinfo.setHorizontalHeaderItem(0, item)item = QtWidgets.QTableWidgetItem()item.setTextAlignment(QtCore.Qt.AlignCenter)self.tableinfo.setHorizontalHeaderItem(1, item)self.tableinfo.setColumnWidth(0, 195)# 调整第一列(索引0)的宽度到特定宽度self.tableinfo.setColumnWidth(1, 195)# 调整第二列(索引1)的宽度到特定宽度self.tableinfo.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)#表格列将根据窗口大小自动调整宽度,以填充整个表格而不会出现水平滚动条。self.pushButton_add = QtWidgets.QPushButton(self.centralwidget)self.pushButton_add.setGeometry(QtCore.QRect(440, 180, 61, 31))self.pushButton_add.setObjectName("pushButton")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(400, 110, 61, 21))self.label.setObjectName("label")self.lineEdit_userName = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_userName.setGeometry(QtCore.QRect(460, 110, 71, 21))self.lineEdit_userName.setObjectName("lineEdit")self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(410, 140, 51, 20))self.label_2.setObjectName("label_2")self.lineEdit_passwd = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_passwd.setGeometry(QtCore.QRect(460, 140, 71, 21))self.lineEdit_passwd.setObjectName("lineEdit_2")self.pushButton_edit = QtWidgets.QPushButton(self.centralwidget)self.pushButton_edit.setGeometry(QtCore.QRect(440, 230, 61, 31))self.pushButton_edit.setObjectName("pushButton_2")self.pushButton_del = QtWidgets.QPushButton(self.centralwidget)self.pushButton_del.setGeometry(QtCore.QRect(440, 270, 61, 31))self.pushButton_del.setObjectName("pushButton_3")MainWindow.setCentralWidget(self.centralwidget)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)self.tableinfo.setAlternatingRowColors(True)  # 使表格颜色交错显示self.tableinfo.verticalHeader().setVisible(False)  # 隐藏垂直标题self.query() # 窗体加载时显示所有数据self.tableinfo.itemClicked.connect(self.getItem) # 获取选中的单元格数据self.pushButton_add.clicked.connect(self.add)self.pushButton_edit.clicked.connect(self.edit) # 绑定修改按钮的单击信号self.pushButton_del.clicked.connect(self.delete) # 绑定删除按钮的单击信号def query(self):self.tableinfo.setRowCount(0) # 清空表格中的所有行result = dataBase.query("select * from goods_user") # 调用服务类中的公共方法执行查询语句row = len(result)  # 取得记录个数,用于设置表格的行数self.tableinfo.setRowCount(row)  # 设置表格行数self.tableinfo.setColumnCount(2)  # 设置表格列数for i in range(row):  # 遍历行for j in range(self.tableinfo.columnCount()):  # 遍历列data = QTableWidgetItem(str(result[i][j]))  # 转换后可插入表格data.setFlags(data.flags() & ~QtCore.Qt.ItemIsEditable)  # 设置单元格为只读self.tableinfo.setItem(i, j, data) # 设置每个单元格的数据def getItem(self, item):if item.column() == 0:  # 如果点击的是第一列self.select1 = item.text()  # 获取点击单元格的文本row = item.row()  # 获取点击单元格所在的行item2 = self.tableinfo.item(row, 1)  # 获取同一行第二列的项if item2 is not None:self.select2 = item2.text()self.lineEdit_userName.setText(self.select1)  # 显示在用户名文本框中self.lineEdit_passwd.setText(self.select2)  # 显示在密码文本框中if item.column() == 1:self.select2 = item.text()row = item.row()item1 = self.tableinfo.item(row, 0)if item1 is not None:self.select1 = item1.text()self.lineEdit_userName.setText(self.select1)self.lineEdit_passwd.setText(self.select2)def add(self):userName = self.lineEdit_userName.text() # 记录输入的用户名userPwd = self.lineEdit_passwd.text() # 记录输入的用户密码if userName != "" and userPwd != "": # 判断用户名和密码不为空# 执行添加语句result=dataBase.exec("insert into goods_user(userName,userPasswd) values (%s,%s)",(userName,userPwd))if result>0:  # 如果结果大于0,说明添加成功self.query() # 在表格中显示最新数据QMessageBox.information(None, '提示', '信息添加成功!', QMessageBox.Ok)else:QMessageBox.warning(None, '警告', '请输入数据后,再执行相关操作!', QMessageBox.Ok)def edit(self):try:if self.select1!="": # 判断是否选择了要修改的数据userPwd = self.lineEdit_passwd.text() # 记录修改的用户密码if userPwd != "": # 判断密码不为空# 执行修改操作result=dataBase.exec("update goods_user set userPasswd= %s where userName=%s",(userPwd,self.select1))if result>0: # 如果结果大于0,说明修改成功self.query() # 在表格中显示最新数据QMessageBox.information(None, '提示', '信息修改成功!', QMessageBox.Ok)except:QMessageBox.warning(None, '警告', '请先选择要修改的数据!', QMessageBox.Ok)def delete(self):try:if self.select1!="": # 判断是否选择了要删除的数据# 执行删除操作result=dataBase.exec("delete from goods_user where userName= %s",(self.select1,))if result>0: # 如果结果大于0,说明删除成功self.query() # 在表格中显示最新数据QMessageBox.information(None, '提示', '信息删除成功!', QMessageBox.Ok)except:QMessageBox.warning(None, '警告', '请先选择要删除的数据!', QMessageBox.Ok)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "账号密码设置"))item = self.tableinfo.horizontalHeaderItem(0)item.setText(_translate("MainWindow", "用户名"))item = self.tableinfo.horizontalHeaderItem(1)item.setText(_translate("MainWindow", "密码"))self.pushButton_add.setText(_translate("MainWindow", "添加"))self.label.setText(_translate("MainWindow", " 用 户:"))self.label_2.setText(_translate("MainWindow", "密 码:"))self.pushButton_edit.setText(_translate("MainWindow", "修改"))self.pushButton_del.setText(_translate("MainWindow", "删除"))

相关文章:

PyQt5-小总结

之前学习PyQt5&#xff0c;然后那段时间想做一个桌面小程序&#xff0c;后来由于学习内容较多就做了一小部分&#xff0c;但是可以进行页面跳转。大家如果是初学者对Python感兴趣而且刚学数据库时可以看看代码&#xff0c;可能会有点启发。 效果&#xff1a; 登录进来是这&…...

vue父组件给子组件传值,子组件不渲染的原因及解决方法

父组件传递给子组件的数据&#xff0c;如果是一个复杂对象&#xff08;例如一个数组或对象&#xff09;&#xff0c;那么子组件只会监听对象的引用而不是对象的内容。这意味着当对象的内容发生变化时&#xff0c;子组件不会更新。 解决&#xff1a; 1、在子组件使用 watch 监听…...

【数据库】MySQL锁

一、锁的基本概念 1、锁的定义 锁是协调多个进程或线程并发访问数据库资源的一种机制。 MySQL中的锁是在服务器层或者存储引擎层实现的&#xff0c;保证了数据访问的一致性与有效性。但加锁是消耗资源的&#xff0c;锁的各种操作&#xff0c;包括获得锁、检测锁是否已解除、…...

mongodb学习篇

目录 前言基本概念数据库-database集合-collection文档-document 部署mongodblinux安装mongodbdocker安装mongodb MongoDB Shell (mongosh)命令行工具mongodb可视化-mongodb-compass、mongo-expressmongodb配置文件mongodb库、集合、文档库基本操作集合基本操作文档的增删改查C…...

kubernetes存储类迁移-备份恢复

背景介绍 kubernetes集群最开始使用了nfs作为存储&#xff0c;随着后续使用过程中数据量逐渐增加&#xff0c;nfs存储性能逐步出现不足&#xff0c;现增加了基于csi的分布式块存储后&#xff0c;需要对原有基于nfs存储类下的pv迁移到新的存储类下。 测试环境 k8s集群版本&am…...

python智能手机芯片

在未来&#xff0c;python智能手机芯片的发展方向可能包括以下几个方面&#xff1a; 强化处理能力&#xff1a;随着智能手机功能的不断扩展和用户需求的增加&#xff0c;处理器的性能需求也在不断提升。未来的python智能手机芯片可能会加强处理器的核心数量和频率&#xff0c;以…...

混淆技术概论

混淆技术概论 引言 在逆向工程领域&#xff0c;混淆技术是一种非常重要的技术手段&#xff0c;通过打破人们的思维惯性&#xff0c;使得逆向分析变得更加困难。本文将会介绍混淆技术的概念、分类及其应用&#xff0c;以及如何使用IPA Guard进行iOS IPA重签名。 混淆技术概述…...

pytest安装失败,报错Could not find a version that satisfies the requirement pytest

问题 安装pytest失败&#xff0c;尝试使用的命令有 pip install pytest pip3 install pytest pip install -U pytest pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple但是都会报同样的错&#xff1a; 解决方案 发现可能是挂了梯子的原因&#xff0c;关掉…...

使用 Maven 的 dependencyManagement 管理项目依赖项

使用 Maven 的 dependencyManagement 管理项目依赖项 介绍 在开发 Java 项目时&#xff0c;管理和协调依赖项的版本号是一项重要而繁琐的任务。 而 Maven 提供了 <dependencyManagement> 元素&#xff0c;用于定义项目中所有依赖项的版本。它允许您指定项目中每个依赖…...

三英战吕布web3游戏项目启动全流程

项目是一个学习相关的很好的例子并且开源&#xff0c;原本的项目是连接goerli网络&#xff0c;但我把它修改为可连接ganache网络的项目了&#xff0c;更方便启动。 智能合约部分 进入文件 hardhat.config.js &#xff0c;增加一个钱包私钥 2.执行npm install 3.测试合约 npx ha…...

TS中的类

目录 ES6的类 类的概念 类的构成 类的创建 声明 构造函数 定义内容 创建实例 TS中的类 类声明 构造函数 属性和方法 实例化类 继承 访问修饰符 public private protected 成员访问修饰符的使用原则 访问器 只读成员与静态成员 readonly static 修饰符总…...

玩转硬件之玩改朗逸中控设备

这是一个有关一件被拆卸的朗逸中控设备的故事。这个设备已经闲置多年&#xff0c;但是它的命运发生了转变。它被改装成了一台收音机和MP3播放器。 这个设备曾经是一辆朗逸的中控屏幕&#xff0c;就是因为它没有倒车影像&#xff0c;它就被拆了下来&#xff0c;被扔在了一个角落…...

根据MySql的表名,自动生成实体类,模仿ORM框架

ORM框架可以根据数据库的表自动生成实体类&#xff0c;以及相应CRUD操作 本文是一个自动生成实体类的工具&#xff0c;用于生成Mysql表对应的实体类。 新建Winform窗体应用程序AutoGenerateForm&#xff0c;框架(.net framework 4.5)&#xff0c; 添加对System.Configuration的…...

Mac上安装tensorflow介绍留存

此预版本为 macOS 11.0 提供了硬件加速的 TensorFlow 和 TensorFlow 插件。M1 Mac 和基于 Intel 的 Mac 通过 Apple 的 ML 计算框架支持本机硬件加速。 TensorFlow r2.4rc0TensorFlow Addons 0.11.2 TensorFlow 插件 0.11.2 REQUIREMENTS 要求 macOS 11.0Python 3.8 (requir…...

【赠书第16期】码上行动:用ChatGPT学会Python编程

文章目录 前言 1 ChatGPT简介 2 Python编程简介 3 使用ChatGPT学习Python编程 4 如何使用ChatGPT学习Python编程 5 推荐图书 6 粉丝福利 前言 随着人工智能技术的不断发展&#xff0c;聊天机器人已经成为我们日常生活和工作中不可或缺的一部分。其中&#xff0c;ChatGP…...

LeetCode 每日一题 2024/1/1-2024/1/7

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/1 1599. 经营摩天轮的最大利润1/2 466. 统计重复个数1/3 2487. 从链表中移除节点1/4 2397. 被列覆盖的最多行数1/5 1944. 队列中可以看到的人数1/6 2807. 在链表中插入最…...

7+单细胞+空转+实验验证,如何根据内容开展相关经验给你启发

导语 今天给同学们分享一篇生信文章“CD8 tissue-resident memory T cells induce oral lichen planus erosion via cytokine network”&#xff0c;这篇文章发表在Elife期刊上&#xff0c;影响因子为7.7。 结果解读&#xff1a; 单细胞RNA测序揭示了具有不同临床亚型的OLP的细…...

Verifiable Credentials可验证证书 2023 终极指南

1. 引言 Dock公司为去中心化数字身份领域的先驱者&#xff0c;其自2017年以来&#xff0c;已知专注于构建前沿的可验证证书&#xff08;Verifiable Credentials&#xff09;技术。本文将阐述何为电子证书、电子证书工作原理、以及其对组合和个人的重要性。 伪造实物证书和数字…...

R语言【sp】——SpatialPoints():创建类SpatialPoints或SpatialPointsDataFrame的对象

Package sp version 1.5-0 Description 从坐标或数据帧的坐标创建类 SpatialPoints-class 或 SpatialPointsDataFrame-class 的对象。 Usage SpatialPoints(coords, proj4stringCRS(as.character(NA)), bbox NULL)SpatialPointsDataFrame(coords, data, coords.nrs numeric…...

【Verilog】期末复习——简要说明仿真时阻塞赋值和非阻塞赋值的区别。always语句和initial语句的关键区别是什么?能否相互嵌套?

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...