1. A propos de la classe QTextEdit
Le module module PyQt5.QtWidgets est équipé de la classe QTextEdit permettant de créer un zone d'édition riche texte. Ce dernier offre la possibilité aux utilisateurs d'entrer, modifier et afficher un texte avec une mise en forme personnalisée. Nous vous présentons ici un tutoriel complet de ce widget en commençant par citer les caractéristiques et fonctionnalités principales d'une façon non exhaustive:
- Édition de texte : Le widget QTextEdit, offre la possibilité de saisir, modifier, sélectionner et supprimer un texte, déplacer le curseur... d'une façon visuelle en toute simplicité
- Mise en forme du texte : QTextEdit prend en charge la mise en forme du texte avec des fonctionnalités telles que la police, la taille, la couleur, le style (gras, italique, souligné), l'alignement, l'indentation, les listes à puces, etc. Il offre un large éventail d'options pour personnaliser l'apparence du texte.
- Gestion des images et des liens : QTextEdit permet l'insertion et l'affichage d'images à l'intérieur du texte. Il peut également gérer les liens hypertexte en les affichant de manière interactive et en permettant aux utilisateurs de les ouvrir dans un navigateur web.
- Undo/Redo : QTextEdit prend en charge les opérations d'annulation et de rétablissement (undo/redo) pour permettre aux utilisateurs d'annuler ou de rétablir les modifications effectuées dans le texte.
- Copier/Coller : QTextEdit permet aux utilisateurs de copier et de coller du texte à partir du presse-papiers système. Il offre également des méthodes pour copier le contenu sélectionné dans d'autres applications ou pour coller le texte à partir du presse-papiers.
- Enregistrement et chargement de texte : QTextEdit permet d'enregistrer le contenu du texte dans un fichier texte et de charger du texte à partir d'un fichier existant. Cela facilite la sauvegarde et la récupération du contenu édité par les utilisateurs.
- Signaux et slots : QTextEdit émet différents signaux pour informer les applications lorsque le texte est modifié, sélectionné ou lorsque des actions d'édition sont effectuées. Ces signaux peuvent être connectés à des slots personnalisés pour répondre aux événements liés au texte.
2. A propos de l'éditeur
Ce code crée un éditeur de texte avec un menu comprenant un menu "Fichier" qui contient les éléments suivants:
- "Nouveau",
- "Enregistrer",
- "Enregistrer sous"
- "Quitter"
Et un menu "Édition" contenant les options
- "Annuler",
- "Rétablir",
- "Copier"
- "Coller"
L'éditeur de texte utilise une instance de QTextEdit comme widget central.
- L'option "Nouveau": efface le contenu de l'éditeur de texte pour en créer un autre.
- L'option "Enregistrer": enregistre le contenu dans un fichier texte sélectionné par l'utilisateur.
- L'option "Enregistrer sous": permet à l'utilisateur de spécifier un nouvel emplacement et nom de fichier pour enregistrer le contenu.
- L'option "Quitter": ferme l'application.
Les options:
- "Annuler",
- "Rétablir",
- "Copier"
- "Coller"
fonctionnent comme prévu dans un éditeur de texte standard.
3. Code de l'éditeur
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QMessageBox, QFileDialog from PyQt5.QtGui import QIcon class TextEditor(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Éditeur de texte") self.resize(800, 600) self.text_edit = QTextEdit() self.setCentralWidget(self.text_edit) self.create_menu() def create_menu(self): # Menu Fichier file_menu = self.menuBar().addMenu("Fichier") new_action = QAction(QIcon(), "Nouveau", self) new_action.setShortcut("Ctrl+N") new_action.triggered.connect(self.new_file) file_menu.addAction(new_action) save_action = QAction(QIcon(), "Enregistrer", self) save_action.setShortcut("Ctrl+S") save_action.triggered.connect(self.save_file) file_menu.addAction(save_action) save_as_action = QAction(QIcon(), "Enregistrer sous", self) save_as_action.setShortcut("Ctrl+Shift+S") save_as_action.triggered.connect(self.save_file_as) file_menu.addAction(save_as_action) quit_action = QAction(QIcon(), "Quitter", self) quit_action.setShortcut("Ctrl+Q") quit_action.triggered.connect(self.close) file_menu.addAction(quit_action) # Menu Édition edit_menu = self.menuBar().addMenu("Édition") undo_action = QAction(QIcon(), "Annuler", self) undo_action.setShortcut("Ctrl+Z") undo_action.triggered.connect(self.text_edit.undo) edit_menu.addAction(undo_action) redo_action = QAction(QIcon(), "Rétablir", self) redo_action.setShortcut("Ctrl+Y") redo_action.triggered.connect(self.text_edit.redo) edit_menu.addAction(redo_action) copy_action = QAction(QIcon(), "Copier", self) copy_action.setShortcut("Ctrl+C") copy_action.triggered.connect(self.text_edit.copy) edit_menu.addAction(copy_action) paste_action = QAction(QIcon(), "Coller", self) paste_action.setShortcut("Ctrl+V") paste_action.triggered.connect(self.text_edit.paste) edit_menu.addAction(paste_action) def new_file(self): self.text_edit.clear() def save_file(self): file_path, _ = QFileDialog.getSaveFileName(self, "Enregistrer le fichier", "", "Fichiers texte (*.txt)") if file_path: try: with open(file_path, "w") as file: file.write(self.text_edit.toPlainText()) QMessageBox.information(self, "Enregistrement", "Le fichier a été enregistré avec succès.") except IOError: QMessageBox.critical(self, "Erreur", "Impossible d'enregistrer le fichier.") def save_file_as(self): file_path, _ = QFileDialog.getSaveFileName(self, "Enregistrer le fichier sous", "", "Fichiers texte (*.txt)") if file_path: try: with open(file_path, "w") as file: file.write(self.text_edit.toPlainText()) QMessageBox.information(self, "Enregistrement", "Le fichier a été enregistré avec succès.") except IOError: QMessageBox.critical(self, "Erreur", "Impossible d'enregistrer le fichier.") if __name__ == "__main__": app = QApplication(sys.argv) text_editor = TextEditor() text_editor.show() sys.exit(app.exec_()) |
Younes Derfoufi
CRMEF OUJDA