免费分享一套PyQt6图书管理系统(附带完整开发视频教程) Python入门项目实战,果断收藏了~~

news2024/11/17 5:40:53

大家好,我是python222_小锋老师,最近写了一套PyQt6图书管理系统源码,附带完整开发视频教程,作为Python学习者的入门实战项目,带大家一起入门学习Python技术,感谢大家支持,特来分享下哈。

项目实战视频

PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计9条视频,包括:PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~、第2讲 登录功能UI设计实现、第3讲 数据库操作工具包dbUtil.py封装等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV18t4y1R7Qp/

项目介绍

本项目作为Python入门实战项目,数据库采用Mysql,操作数据采用PyMsql。项目就三个用,用户表,图书类别表,图书表。图书和图书类别实现一对多,主外键关联,通过PyQt6图形化技术,以及Python,来实现对经典多对一表之间的逻辑操作。

通过这个入门项目,带大家一起来深入体验Python项目实战开发。

系统展示

部分代码

# Form implementation generated from reading ui file '登录.ui'
#
# Created by: PyQt6 UI code generator 6.4.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again.  Do not edit this file unless you know what you are doing.
import sys

from PyQt6 import QtCore, QtGui, QtWidgets, uic
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QLineEdit

import main
from dao import userDao
from entity.UserModel import User


class Ui_Form(QWidget):

    def __init__(self):
        super(Ui_Form, self).__init__()
        self.setupUi(self)

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(517, 423)
        self.formLayoutWidget = QtWidgets.QWidget(parent=Form)
        self.formLayoutWidget.setGeometry(QtCore.QRect(100, 130, 321, 168))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout.setContentsMargins(30, 10, 10, 0)
        self.formLayout.setHorizontalSpacing(30)
        self.formLayout.setVerticalSpacing(50)
        self.formLayout.setObjectName("formLayout")
        self.label = QtWidgets.QLabel(parent=self.formLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label)
        self.lineEdit = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
        self.lineEdit.setObjectName("lineEdit")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.lineEdit)
        self.label_2 = QtWidgets.QLabel(parent=self.formLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_2)
        self.lineEdit_2 = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
        self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.lineEdit_2)
        self.pushButton = QtWidgets.QPushButton(parent=Form)
        self.pushButton.setGeometry(QtCore.QRect(130, 280, 101, 31))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("images/login.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.pushButton.setIcon(icon)
        self.pushButton.setObjectName("pushButton")

        # 加点击信息槽
        self.pushButton.clicked.connect(self.login)

        self.pushButton_2 = QtWidgets.QPushButton(parent=Form)
        self.pushButton_2.setGeometry(QtCore.QRect(300, 280, 91, 31))
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("images/reset.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.pushButton_2.setIcon(icon1)
        self.pushButton_2.setObjectName("pushButton_2")
        self.label_3 = QtWidgets.QLabel(parent=Form)
        self.label_3.setGeometry(QtCore.QRect(190, 60, 221, 51))
        font = QtGui.QFont()
        font.setPointSize(26)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(parent=Form)
        self.label_4.setGeometry(QtCore.QRect(120, 50, 61, 61))
        self.label_4.setText("")
        self.label_4.setPixmap(QtGui.QPixmap("images/logo.png"))
        self.label_4.setObjectName("label_4")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "管理员登录"))
        self.label.setText(_translate("Form", "用户名:"))
        self.label_2.setText(_translate("Form", "密  码:"))
        self.pushButton.setText(_translate("Form", "登录"))
        self.pushButton_2.setText(_translate("Form", "重置"))
        self.label_3.setText(_translate("Form", "图书管理系统"))

    def resetForm(self):
        """
        重置
        :return:
        """
        self.lineEdit.setText("")
        self.lineEdit_2.setText("")

    def login(self):
        """
        用户登录判断 数据库判断成功,则打开主窗体,否则提示报错信息
        :return:
        """
        userName = self.lineEdit.text()
        password = self.lineEdit_2.text()
        if userName.strip() == "" or password.strip() == "":
            QMessageBox.warning(None, '系统提示', '用户名和密码不能为空!')
        else:
            user = User(userName, password)
            resultUser = userDao.login(user)
            if resultUser:
                print("用户登录成功")
                userDao.currentUser = user
                self.m = main.Ui_MainWindow()  # 实例化主窗体
                self.m.show()  # 打开主窗体
                self.hide()  # 隐藏登录窗体
            else:
                print("用户登录失败")
                QMessageBox.warning(None, '系统提示', '用户名或者密码输入错误!')


if __name__ == '__main__':
    app = QApplication(sys.argv)

    ui = Ui_Form()
    ui.show()

    sys.exit(app.exec())
"""
    数据库连接工具
    作者 : 小锋老师
    官网 : www.python222.com
"""

from pymysql import Connection


def getCon():
    """
    获取数据连接
    :return: 数据库连接
    """
    con = Connection(
        host="localhost",  # 主机名
        port=3306,  # 端口
        user="root",  # 账户
        password="123456",  # 密码
        database="db_book",  # 数据库
        autocommit=True  # 设置自动提交
    )
    return con


def closeCon(con: Connection):
    """
    关闭数据库连接
    :param con: 数据库连接
    :return:
    """
    if con:
        con.close()

源码下载

CSDN 1积分下载:https://download.csdn.net/download/caofeng891102/88740614

或者免费领取加小锋老师wx:java3459

热门推荐

免费分享一套PyQt6学生信息管理系统 Python管理系统 Python源码,挺漂亮的-CSDN博客文章浏览阅读2.3k次,点赞82次,收藏35次。期末作业要求用Qt做一个学生管理系统,笔者这段时间在自学Python,故在征求老师同意后不用C++而选择了Python的PyQt5,本项目主要实现了PyQt5的增删改查。因为学习PyQt5的时间短,写代码时遇到了很多困难,笔者在CSDN与Github上我查阅了大量的资料,最终做了一个半成品出来。但笔者认为,以这个小项目作为一个入门练手项目十分合适,现将其分享,希望能够帮助到新手入门的人。本项目主要用到了PyQt5、pymysql、xlwt模块、Mysql数据库、QtDesigner和pyuic。https://blog.csdn.net/caoli201314/article/details/135313681

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1385410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java小游戏——动漫美女拼图

1:继承 1.1 继承概述 首先,我们来说一下,什么是继承: 继承是面向对象三大特征之一(封装,继承和多态) 可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法 也就是说&…

生日视频模板-试试这样制作

视频制作已经成为表达情感、记录生活的重要方式。尤其在生日这样的特殊日子,一份个性化的视频祝福不仅能让人感到温馨,还能成为长久珍藏的回忆。那么,如何快速制作出精美的生日模版视频呢?下面就给大家介绍几种可以制作生日模版的…

论文阅读:Attention is all you need

【最近课堂上Transformer之前的DL基础知识储备差不多了,但学校里一般讲到Transformer课程也接近了尾声;之前参与的一些科研打杂训练了我阅读论文的能力和阅读源码的能力,也让我有能力有兴趣对最最源头的论文一探究竟;我最近也想按…

300块成本从零开始搭建自己的家庭版NAS还可以自动备份,懂点代码有手就行!

前言 300块成本从零开始搭建自己的家庭版NAS,还可以手机上文件照片音乐自动备份,完全实现了自己的网盘效果,可以设置用户权限分配,目录上传、断点续传、并行上传、拖拽文件上传等日常操作。 为什么要搭建NAS? 现在的手…

【数据库】间隙锁Gap Lock

什么是间隙锁 间隙锁(Gap Lock):间隙锁是(RR级别下)一个在索引记录之间的间隙上的锁,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。间隙锁(Gap Lo…

失踪人员信息发布与管理系统:计算机毕设课题的研究与实践 springboot+java+vue+mysql

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Cesium 模型压平

最近整理了下手上的代码,以下是对模型压平的说明。 原理是使用了customShader来重新设置了模型的着色器,通过修改模型顶点的坐标来实现了压平。 废话不多说,下面上代码: /*** class* description 3dtiles模型压平*/ class Flat…

docker-ce 安装与国内源配置 | Ubuntu 20.04

博客原文 文章目录 让apt可以支持HTTPS将官方Docker库的GPG公钥添加到系统中将Docker库添加到APT里更新包列表为了确保修改生效,让新的安装从Docker库里获取,而不是从Ubuntu自己的库里获取,执行:安装 docker-ce配置 docker 阿里源…

Java多线程并发篇----第十四篇

系列文章目录 文章目录 系列文章目录前言一、ReadWriteLock 读写锁二、共享锁和独占锁三、重量级锁(Mutex Lock)四、轻量级锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给…

【图解数据结构】深入剖析时间复杂度与空间复杂度的奥秘

🌈个人主页:聆风吟 🔥系列专栏:图解数据结构、算法模板 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️算法的定义二. ⛳️算法的特性2.1 🔔输入输出2.2 🔔输入输出2.3 &…

Multimodal Prototypical Networks for Few-shot Learning

tcGAN is provided with an embedding ϕ T \phi_T ϕT​() of the textual description 辅助信息 作者未提供代码

大模型中的显卡优化与分布式训练策略

目录 前言1 大模型训练优化的目标1.1 简单性1.2. 高效性1.3 廉价性 2 显存的组成与利用2.1 参数存储2.2 梯度计算与存储2.3 中间计算结果2.4 优化器信息 3 优化方法3.1 数据并行3.2 模型并行3.3 零冗余优化器(Zero Redundancy Optimizer)3.4 Pipeline并行…

前端数据魔法:解析数据透视功能实现

前言 在信息爆炸的时代,数据扮演着关键的角色。从庞大的数据中提取有用的信息并进行有效地分析,是一项充满挑战的任务。为了应对这个挑战,数据透视表这一工具应运而生。它通过重新排列和组合数据,使得原始数据更易于理解和分析。…

解决鸿蒙APP的内存泄漏

解决鸿蒙(HarmonyOS)应用的内存泄漏问题需要采用一系列的策略和技术。与解决Android内存泄漏类似,以下是一些建议,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1…

增强FAQ搜索引擎:发挥Elasticsearch中KNN的威力

英文原文地址:https://medium.com/nerd-for-tech/enhancing-faq-search-engines-harnessing-the-power-of-knn-in-elasticsearch-76076f670580 增强FAQ搜索引擎:发挥Elasticsearch中KNN的威力 2023 年 10 月 21 日 在一个快速准确的信息检索至关重要的…

收银系统源码,连锁店收银系统源码

智慧新零售系统是一套线下线上一体化的收银系统。致力于给零售门店提供『多样化线下收银』、『ERP进销存』、『o2o小程序商城』、『精细化会员管理』、『丰富营销插件』等一体化行业解决方案! 一、多样化线下收银 1.聚合收款码 ①适用商户:小微门店&am…

在 .NET 中使用可以漫游的 Web 凭据

Windows 凭据管理器是一个内置在 Windows 操作系统中的功能,为用户提供一种安全的方式来存储和管理凭据。本文主要介绍如何在 .NET 中使用可以漫游的 Web 凭据,以及使用中的基本事项。 1. 引言 在前面的文章《试用 Windows Terminal 中的 Terminal Chat…

SwiftUI CoreData Picker

开发多账本功能 CoreData 与 Picker 的使用 上代码: // // TestZhangBenPicker.swift // pandabill // // Created by 朱洪苇 on 2024/1/14. //import SwiftUIstruct TestZhangBenPicker: View {FetchRequest(sortDescriptors: [SortDescriptor(\.cc_at)],anima…

人工智能与六西格玛设计:一场颠覆性的融合之旅

随着科技的飞速发展,人工智能(AI)和六西格玛设计(Six Sigma)已成为当今企业追求卓越的关键工具。当这两大领域相遇,它们将引发一场创新与变革的狂潮。本文将探讨AI与六西格玛设计结合的潜力,以及…

MySQL 查看表结构简单命令

一、简单描述表结构,字段类型 desc tabl_name; # 表名 显示表结构,字段类型,主键,是否为空等属性。 二、查询表中列的注释信息 select * from information_schema.columns where table_schema db #表所在数据库 and table_n…