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,然后那段时间想做一个桌面小程序,后来由于学习内容较多就做了一小部分,但是可以进行页面跳转。大家如果是初学者对Python感兴趣而且刚学数据库时可以看看代码,可能会有点启发。 效果: 登录进来是这&…...
vue父组件给子组件传值,子组件不渲染的原因及解决方法
父组件传递给子组件的数据,如果是一个复杂对象(例如一个数组或对象),那么子组件只会监听对象的引用而不是对象的内容。这意味着当对象的内容发生变化时,子组件不会更新。 解决: 1、在子组件使用 watch 监听…...

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

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

kubernetes存储类迁移-备份恢复
背景介绍 kubernetes集群最开始使用了nfs作为存储,随着后续使用过程中数据量逐渐增加,nfs存储性能逐步出现不足,现增加了基于csi的分布式块存储后,需要对原有基于nfs存储类下的pv迁移到新的存储类下。 测试环境 k8s集群版本&am…...
python智能手机芯片
在未来,python智能手机芯片的发展方向可能包括以下几个方面: 强化处理能力:随着智能手机功能的不断扩展和用户需求的增加,处理器的性能需求也在不断提升。未来的python智能手机芯片可能会加强处理器的核心数量和频率,以…...

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

pytest安装失败,报错Could not find a version that satisfies the requirement pytest
问题 安装pytest失败,尝试使用的命令有 pip install pytest pip3 install pytest pip install -U pytest pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple但是都会报同样的错: 解决方案 发现可能是挂了梯子的原因,关掉…...

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

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

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

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

根据MySql的表名,自动生成实体类,模仿ORM框架
ORM框架可以根据数据库的表自动生成实体类,以及相应CRUD操作 本文是一个自动生成实体类的工具,用于生成Mysql表对应的实体类。 新建Winform窗体应用程序AutoGenerateForm,框架(.net framework 4.5), 添加对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 粉丝福利 前言 随着人工智能技术的不断发展,聊天机器人已经成为我们日常生活和工作中不可或缺的一部分。其中,ChatGP…...
LeetCode 每日一题 2024/1/1-2024/1/7
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 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”,这篇文章发表在Elife期刊上,影响因子为7.7。 结果解读: 单细胞RNA测序揭示了具有不同临床亚型的OLP的细…...

Verifiable Credentials可验证证书 2023 终极指南
1. 引言 Dock公司为去中心化数字身份领域的先驱者,其自2017年以来,已知专注于构建前沿的可验证证书(Verifiable Credentials)技术。本文将阐述何为电子证书、电子证书工作原理、以及其对组合和个人的重要性。 伪造实物证书和数字…...
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语句的关键区别是什么?能否相互嵌套?
系列文章 数值(整数,实数,字符串)与数据类型(wire、reg、mem、parameter) 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...