import sys from os.path import join from config import Config from core import Redim from PyQt5 import QtWidgets, QtCore, QtGui class Ajout_taille(QtWidgets.QDialog): """Fenêtre pour rajout d'une taille """ def __init__(self, config): super(Ajout_taille, self).__init__() self.setWindowTitle("Ajout d'une dimension") logo = join("Ressources", "icon.ico") self.setWindowIcon(QtGui.QIcon(logo)) self.config = config self.ajout = False texte_larg = QtWidgets.QLabel("Largeur:") self.edit_larg = QtWidgets.QLineEdit() texte_haut = QtWidgets.QLabel("Hauteur:") self.edit_haut = QtWidgets.QLineEdit() self.layout_btn = QtWidgets.QHBoxLayout() btn_ajouter = QtWidgets.QPushButton("Ajouter") btn_ajouter.clicked.connect(self.valider) self.layout_main = QtWidgets.QVBoxLayout() self.layout_groupbox = QtWidgets.QVBoxLayout() self.layout_taille = QtWidgets.QHBoxLayout() self.groupbox_main = QtWidgets.QGroupBox("Ajout d'une dimension (en pixel)") self.groupbox_main.setLayout(self.layout_groupbox) self.layout_taille.addWidget(texte_larg) self.layout_taille.addWidget(self.edit_larg) self.layout_taille.addWidget(texte_haut) self.layout_taille.addWidget(self.edit_haut) self.layout_btn.addStretch() self.layout_btn.addWidget(btn_ajouter) self.layout_btn.addStretch() self.layout_groupbox.addLayout(self.layout_taille) self.layout_main.addWidget(self.groupbox_main) self.layout_main.addStretch() self.layout_main.addLayout(self.layout_btn) self.setLayout(self.layout_main) def valider(self): if self.edit_larg.text().isdigit() and self.edit_haut.text().isdigit(): self.config["dimensions"].append( [int(self.edit_larg.text()), int(self.edit_haut.text())] ) self.ajout = True self.accept() else: QtWidgets.QMessageBox.warning(self, "Erreur", "Entrée incorrecte") class Gui(QtWidgets.QMainWindow): def __init__(self): super(Gui, self).__init__() self.redim = Redim() self.config = Config() self.configuration = self.config.lecture() self.choix_dimensions = [[], []] logo = join("Ressources", "icon.ico") self.setWindowIcon(QtGui.QIcon(logo)) menu = self.menuBar() menu_options = menu.addMenu("Options") btn_reset = QtWidgets.QAction("Reset des paramètres", self) btn_reset.triggered.connect(self.reset) btn_apropos = QtWidgets.QAction("A propos", self) btn_apropos.triggered.connect(self.a_propos) menu_options.addAction(btn_reset) menu_options.addAction(btn_apropos) self.setWindowTitle("Redim") self.home() def home(self): self.layout_main = QtWidgets.QVBoxLayout() # Layout Sélection dossier self.edit_source = QtWidgets.QLineEdit("Aucun dossier sélectionné.") self.edit_source.setReadOnly(True) btn_source = QtWidgets.QPushButton("Sélection dossier") btn_source.clicked.connect(self.selection_dossier) self.groupbox_source = QtWidgets.QGroupBox( "Sélection du dossier source" ) self.layout_source = QtWidgets.QHBoxLayout() self.layout_source.addWidget(self.edit_source) self.layout_source.addWidget(btn_source) # Layout Configuration self.combobox_taille_1 = QtWidgets.QComboBox(self) self.combobox_taille_2 = QtWidgets.QComboBox(self) self.update_dimensions() self.combobox_taille_1.activated[str].connect(self.choix_combobox_1) self.combobox_taille_2.activated[str].connect(self.choix_combobox_2) btn_modif_taille = QtWidgets.QPushButton("Ajout taille") btn_modif_taille.clicked.connect(self.ajout_taille) self.edit_red = QtWidgets.QLineEdit() self.edit_green = QtWidgets.QLineEdit() self.edit_blue = QtWidgets.QLineEdit() if self.configuration["transparence"]: self.edit_red.setReadOnly(True) self.edit_green.setReadOnly(True) self.edit_blue.setReadOnly(True) else: self.edit_red.setText(str(self.configuration["background"][0])) self.edit_green.setText(str(self.configuration["background"][0])) self.edit_blue.setText(str(self.configuration["background"][0])) self.checkbox_transparency = QtWidgets.QCheckBox( "Conserver la transparence." ) self.checkbox_transparency.stateChanged.connect( self.update_checkbox_transparency ) if self.configuration["transparence"]: self.checkbox_transparency.setCheckState(QtCore.Qt.Checked) self.cb_format = QtWidgets.QComboBox(self) if self.configuration["transparence"]: self.cb_format.addItem(".webp") self.cb_format.addItem(".png") else: for i in self.configuration["formats_possibles"]: self.cb_format.addItem(".{0}".format(i)) self.layout_config = QtWidgets.QHBoxLayout() self.groupbox_taille = QtWidgets.QGroupBox("Choix Dimensions") self.layout_taille = QtWidgets.QVBoxLayout() self.layout_taille.addStretch() self.layout_taille.addWidget(self.combobox_taille_1) self.layout_taille.addWidget(self.combobox_taille_2) self.layout_taille.addWidget(btn_modif_taille) self.groupbox_taille.setLayout(self.layout_taille) self.layout_config.addWidget(self.groupbox_taille) self.layout_config.addStretch() self.groupbox_rgb = QtWidgets.QGroupBox("RGB") self.layout_rgb = QtWidgets.QVBoxLayout() self.layout_rgb.addStretch() self.layout_edit_rgb = QtWidgets.QHBoxLayout() self.layout_edit_rgb.addWidget(self.edit_red) self.layout_edit_rgb.addWidget(self.edit_green) self.layout_edit_rgb.addWidget(self.edit_blue) self.layout_rgb.addLayout(self.layout_edit_rgb) self.layout_rgb.addWidget(self.checkbox_transparency) self.layout_rgb.addStretch() self.groupbox_rgb.setLayout(self.layout_rgb) self.layout_config.addWidget(self.groupbox_rgb) self.layout_config.addStretch() self.groupbox_format = QtWidgets.QGroupBox("Choix format de sortie") self.layout_format = QtWidgets.QVBoxLayout() self.layout_format.addStretch() self.layout_format.addWidget(self.cb_format) self.layout_format.addStretch() self.groupbox_format.setLayout(self.layout_format) self.layout_config.addWidget(self.groupbox_format) self.layout_config.addStretch() # Layout Validation self.progressbar_validation = QtWidgets.QProgressBar() self.progressbar_validation.setMaximum(100) self.nom_fichier_en_cour = QtWidgets.QLabel("Travail sur:") btn_validation = QtWidgets.QPushButton("Convertir") btn_validation.clicked.connect(self.valider) self.groupbox_validation = QtWidgets.QGroupBox("Validation") self.layout_validation = QtWidgets.QHBoxLayout() self.layout_validation.addWidget(self.progressbar_validation) self.layout_validation.addWidget(self.nom_fichier_en_cour) self.layout_validation.addStretch() self.layout_validation.addWidget(btn_validation) # Layout Main self.mainWidget = QtWidgets.QWidget() self.layout_main.addStretch() self.groupbox_source.setLayout(self.layout_source) self.layout_main.addWidget(self.groupbox_source) self.layout_main.addStretch() self.layout_main.addLayout(self.layout_config) self.layout_main.addStretch() self.groupbox_validation.setLayout(self.layout_validation) self.layout_main.addWidget(self.groupbox_validation) self.layout_main.addStretch() self.mainWidget.setLayout(self.layout_main) self.setCentralWidget(self.mainWidget) self.show() def selection_dossier(self, choix): self.dossier = QtWidgets.QFileDialog.getExistingDirectory( self, "Sélectionner le dossier sur lequel travailler." ) if self.dossier != "": self.edit_source.setText(self.dossier) else: self.edit_source.setText("Aucun dossier sélectionné.") def choix_combobox_1(self, choix): self.choix_dimensions[0] = [int(i) for i in choix.split("x")] def choix_combobox_2(self, choix): self.choix_dimensions[1] = [int(i) for i in choix.split("x")] def ajout_taille(self): ajout_taille_gui = Ajout_taille(self.configuration) ajout_taille_gui.exec() if ajout_taille_gui.ajout: self.config.sauvegarde(ajout_taille_gui.config) self.configuration = self.config.lecture() self.update_dimensions() def update_dimensions(self): for i in range(self.combobox_taille_1.count()): self.combobox_taille_1.removeItem(0) self.combobox_taille_2.removeItem(0) for i in self.configuration["dimensions"]: self.combobox_taille_1.addItem("{0}x{1}".format(i[0], i[1])) self.combobox_taille_2.addItem("{0}x{1}".format(i[0], i[1])) self.combobox_taille_1.setCurrentIndex(self.combobox_taille_1.count() - 2) self.choix_dimensions[0] = [ int(i) for i in self.combobox_taille_1.currentText().split("x") ] self.combobox_taille_2.setCurrentIndex(self.combobox_taille_1.count() - 1) self.choix_dimensions[1] = [ int(i) for i in self.combobox_taille_2.currentText().split("x") ] def update_checkbox_transparency(self, value): if (QtCore.Qt.Checked == value): if not self.configuration["transparence"]: self.configuration["transparence"] = True self.config.sauvegarde(self.configuration) self.edit_red.setReadOnly(True) self.edit_red.setText("") self.edit_green.setReadOnly(True) self.edit_green.setText("") self.edit_blue.setReadOnly(True) self.edit_blue.setText("") for i in range(self.cb_format.count()): self.cb_format.removeItem(0) self.cb_format.addItem(".webp") self.cb_format.addItem(".png") else: self.configuration["transparence"] = False self.config.sauvegarde(self.configuration) self.edit_red.setReadOnly(False) self.edit_red.setText(str(self.configuration["background"][0])) self.edit_green.setReadOnly(False) self.edit_green.setText(str(self.configuration["background"][1])) self.edit_blue.setReadOnly(False) self.edit_blue.setText(str(self.configuration["background"][2])) for i in range(self.cb_format.count()): self.cb_format.removeItem(0) for i in self.configuration["formats_possibles"]: self.cb_format.addItem(".{0}".format(i)) def update_progress_bar(self, value): self.progressbar_validation.setValue(value) def update_nom_travail_fichier(self, value): self.nom_fichier_en_cour.setText("Travail sur: %s" % value) def valider(self): self.configuration["format_choisi"] = self.cb_format.currentText() print(self.configuration) if not self.configuration["transparence"]: rgb_background = [] rgb_background.append(self.edit_red.text()) rgb_background.append(self.edit_green.text()) rgb_background.append(self.edit_blue.text()) for i, j in enumerate(rgb_background): if j.isdigit(): rgb_background[i] = int(j) else: QtWidgets.QMessageBox.warning( self, "Erreur", "Entrée RGB incorrecte" ) return if rgb_background != self.configuration["background"]: self.configuration["background"] = rgb_background self.config.sauvegarde(self.configuration) if hasattr(self, "dossier"): configFinal = self.configuration self.configuration["dimensions"] = self.choix_dimensions self.redim._progress_bar_value.connect(self.update_progress_bar) self.redim._travail_sur_value.connect( self.update_nom_travail_fichier ) returncode_redim = self.redim.main(self.dossier, configFinal) if returncode_redim == 0: QtWidgets.QMessageBox.information( self, "Redim", "redimensionnement terminé!" ) elif returncode_redim == 1: QtWidgets.QMessageBox.warning( self, "Erreur", "Plus de 10 fichiers ont le même nom dans le répertoire final.\
Veuillez renommer vos fichiers originaux ou renommer les précédentes conversions." ) else: QtWidgets.QMessageBox.warning( self, "Erreur", "Veuillez sélectionner un dossier" ) def reset(self): self.config.reset() self.configuration = self.config.lecture() self.choix_dimensions = [[], []] self.update_dimensions() self.checkbox_transparency.setCheckState(0) self.update_checkbox_transparency(0) QtWidgets.QMessageBox.information( self, "Reset des paramètres", "Les paramètres ont été réinitialisés." ) def a_propos(self): QtWidgets.QMessageBox.information( self, "A propos", "Logiciel de redimensionnement d'image.\
Version: %s\
Auteur: Debulois Quentin\
Copyright: \ GNU GPLv3\
Code source: \ git.debulois.fr/redim" % self.configuration["version"] ) if __name__ == "__main__": def main(): """Démarrage de l'app """ app = QtWidgets.QApplication(sys.argv) GUI = Gui() sys.exit(app.exec_()) main()