Semaine 4, jour 4, soir

This commit is contained in:
gauvainboiche
2026-01-15 16:52:26 +01:00
parent 4c9c3b29e8
commit 54bb4d7628
17 changed files with 620 additions and 24 deletions

View File

@@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>520</width>
<height>250</height>
</rect>
</property>
<property name="windowTitle">
<string>Bibliothèque - Python</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QTabWidget" name="tabWidget">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>480</width>
<height>210</height>
</rect>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<property name="elideMode">
<enum>Qt::ElideNone</enum>
</property>
<widget class="QWidget" name="tab_add_book">
<attribute name="title">
<string>Ajouter Livre</string>
</attribute>
<widget class="QLineEdit" name="title_input">
<property name="geometry">
<rect>
<x>140</x>
<y>40</y>
<width>320</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="title_lb">
<property name="geometry">
<rect>
<x>20</x>
<y>40</y>
<width>100</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Titre</string>
</property>
</widget>
<widget class="QLineEdit" name="author_input">
<property name="geometry">
<rect>
<x>140</x>
<y>80</y>
<width>320</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="author_lb">
<property name="geometry">
<rect>
<x>20</x>
<y>80</y>
<width>100</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Auteur</string>
</property>
</widget>
<widget class="QPushButton" name="save_btn">
<property name="geometry">
<rect>
<x>140</x>
<y>120</y>
<width>111</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>Enregistrer</string>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_search">
<attribute name="title">
<string>Recherche</string>
</attribute>
<widget class="QListView" name="results_view">
<property name="geometry">
<rect>
<x>20</x>
<y>60</y>
<width>430</width>
<height>100</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="search_lb">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>181</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Recherche (par mot ou lettre)</string>
</property>
</widget>
<widget class="QLineEdit" name="search_input">
<property name="geometry">
<rect>
<x>210</x>
<y>20</y>
<width>240</width>
<height>20</height>
</rect>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_delete">
<attribute name="title">
<string>Supprimer</string>
</attribute>
<widget class="QPushButton" name="delete_btn">
<property name="geometry">
<rect>
<x>360</x>
<y>50</y>
<width>100</width>
<height>40</height>
</rect>
</property>
<property name="text">
<string>Supprimer</string>
</property>
</widget>
<widget class="QComboBox" name="title_list">
<property name="geometry">
<rect>
<x>20</x>
<y>60</y>
<width>320</width>
<height>20</height>
</rect>
</property>
</widget>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -0,0 +1,11 @@
from PyQt6.QtCore import QObject, pyqtSignal
class SignalManagement(QObject):
change_list_signal = pyqtSignal()
def __init__(self, ui):
super().__init__()
self.ui = ui
def connect_signals(self):
self.change_list_signal.connect(self.ui.refresh_title_list)

View File

@@ -0,0 +1,77 @@
# Form implementation generated from reading ui file '.\gui\library.ui'
#
# Created by: PyQt6 UI code generator 6.10.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.
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(520, 250)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tabWidget = QtWidgets.QTabWidget(parent=self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(20, 20, 480, 210))
self.tabWidget.setElideMode(QtCore.Qt.TextElideMode.ElideNone)
self.tabWidget.setObjectName("tabWidget")
self.tab_add_book = QtWidgets.QWidget()
self.tab_add_book.setObjectName("tab_add_book")
self.title_input = QtWidgets.QLineEdit(parent=self.tab_add_book)
self.title_input.setGeometry(QtCore.QRect(140, 40, 320, 20))
self.title_input.setObjectName("title_input")
self.title_lb = QtWidgets.QLabel(parent=self.tab_add_book)
self.title_lb.setGeometry(QtCore.QRect(20, 40, 100, 20))
self.title_lb.setObjectName("title_lb")
self.author_input = QtWidgets.QLineEdit(parent=self.tab_add_book)
self.author_input.setGeometry(QtCore.QRect(140, 80, 320, 20))
self.author_input.setObjectName("author_input")
self.author_lb = QtWidgets.QLabel(parent=self.tab_add_book)
self.author_lb.setGeometry(QtCore.QRect(20, 80, 100, 20))
self.author_lb.setObjectName("author_lb")
self.save_btn = QtWidgets.QPushButton(parent=self.tab_add_book)
self.save_btn.setGeometry(QtCore.QRect(140, 120, 111, 41))
self.save_btn.setObjectName("save_btn")
self.tabWidget.addTab(self.tab_add_book, "")
self.tab_search = QtWidgets.QWidget()
self.tab_search.setObjectName("tab_search")
self.results_view = QtWidgets.QListView(parent=self.tab_search)
self.results_view.setGeometry(QtCore.QRect(20, 60, 430, 100))
self.results_view.setObjectName("results_view")
self.search_lb = QtWidgets.QLabel(parent=self.tab_search)
self.search_lb.setGeometry(QtCore.QRect(20, 20, 181, 16))
self.search_lb.setObjectName("search_lb")
self.search_input = QtWidgets.QLineEdit(parent=self.tab_search)
self.search_input.setGeometry(QtCore.QRect(210, 20, 240, 20))
self.search_input.setObjectName("search_input")
self.tabWidget.addTab(self.tab_search, "")
self.tab_delete = QtWidgets.QWidget()
self.tab_delete.setObjectName("tab_delete")
self.delete_btn = QtWidgets.QPushButton(parent=self.tab_delete)
self.delete_btn.setGeometry(QtCore.QRect(360, 50, 100, 40))
self.delete_btn.setObjectName("delete_btn")
self.title_list = QtWidgets.QComboBox(parent=self.tab_delete)
self.title_list.setGeometry(QtCore.QRect(20, 60, 320, 20))
self.title_list.setObjectName("title_list")
self.tabWidget.addTab(self.tab_delete, "")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Bibliothèque - Python"))
self.title_lb.setText(_translate("MainWindow", "Titre"))
self.author_lb.setText(_translate("MainWindow", "Auteur"))
self.save_btn.setText(_translate("MainWindow", "Enregistrer"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_add_book), _translate("MainWindow", "Ajouter Livre"))
self.search_lb.setText(_translate("MainWindow", "Recherche (par mot ou lettre)"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_search), _translate("MainWindow", "Recherche"))
self.delete_btn.setText(_translate("MainWindow", "Supprimer"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_delete), _translate("MainWindow", "Supprimer"))

View File

@@ -0,0 +1,16 @@
from logic import actions
from gui.ui_library import
class Ui_Initialization:
def __init__(self, ui):
self.ui = ui
def connect_button(self):
self.ui.save_btn.clicked.connect(self.ui.record_book)
self.ui.delete_btn.clicked.connect(self.ui.delete_book)
self.ui.change_list_signal.connect(self.ui.refresh_title_list)
self.ui.search_input.textChanged.connect(self.ui.search_book)
def fulfill_list(self):
self.ui.title_list.addItems(actions.list_titles())

View File

@@ -0,0 +1,57 @@
from Semaine_04.Bibliotheque.gui.signal_mgt import SignalManagement
from logic import actions
from gui.ui_init import Ui_Initialization
from gui.ui_base import Ui_MainWindow
from PyQt6.QtWidgets import QMessageBox
from PyQt6.QtGui import QStandardItemModel, QStandardItem
class Ui_Library(Ui_MainWindow):
##### Méthode de mise à jour de la liste des titres avec QTSignal
def setupUi(self, MainWindow):
super().setupUi(MainWindow)
ui_init = Ui_Initialization(self)
ui_init.connect_button()
ui_init.fulfill_list()
self.signal_mgt = SignalManagement(self)
self.signal_mgt.connect_signals()
def record_book(self):
title = self.title_input.text()
author = self.author_input.text()
message = actions.register_book(title, author)
QMessageBox.information(None, "Nouvel enregistrement", message)
# self.refresh_title_list()
self.signal_mgt.change_list_signal.emit()
def delete_book(self):
title = self.title_list.currentText()
message = actions.delete_book(title)
QMessageBox.information(None, "Suppression confirmée", message)
# self.refresh_title_list()
self.signal_mgt.change_list_signal.emit()
def refresh_title_list(self):
self.title_list.clear()
self.title_list.addItems(actions.list_titles())
def search_book(self):
word = self.search_input.text()
if len(word) == 1:
results = actions.search_by_letter(word)
self.display_list_view(results)
return
if len(word) > 1:
results = actions.search_by_word(word)
self.display_list_view(results)
return
def display_list_view(self, results):
self.model = QStandardItemModel()
self.results_view.setModel(self.model)
if isinstance(results, str):
self.model.appendRow(QStandardItem(results))
else:
for book in results:
self.model.appendRow(QStandardItem(str(book)))