Bonjour,
j'utilise un Qtextedit en lecture seule pour renseigner des fichiers joints dans une interface.
pas de souci pour charger le qtextedit avec du texte, en gros à chaque fichier renseigné, j'ajoute une ligne au qtextedit en ne renseignant que le nom du fichier et son extension.
J'aimerais que ce QTextedit permette d'ouvrir les fichiers chargés en cliquant sur leurs noms (pour que l'utilisateur puisse bien vérifier ce qu'il a chargé).
J'ai bien réussi à gérer la couleur, l'évènement clic avec la récupération de l'info dans chaque ligne...
La partie ouverture n'est pas dans les lignes de code ci-dessous mais elle ne me posera pas de pb -> l'info de ligne correspondra à la clé d'un dico et un "os.system" ouvrira la value du dico.
L'exemple de code ci-dessous fait l'affaire mais il a 2 petits détails qui me chiffonnent!
J'aimerais que le pointeur de ma souri bascule sur le "doigt" uniquement en zone texte! et là ça bascule uniquement en zone ligne...
je me suis obligé à ajouter 1 ligne vide pour permettre une condition de retour au pointeur classique en zone de QTextEdit vide... (c'est moche non comme approche?)
J'ai pas réussi à trouver 1 moyen de basculer le pointeur en mode normal sur les "restes" de ligne... genre à droite du dernier caractère de chaque ligne.
J'ai essayé de m'en sortir avec les atBlockEnd du QTextCursor avec la position de ma souri mais je commence à tourner en rond... d'où ma présence ici,
comment vous auriez fait?
merci!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QTextEdit) from PyQt5.QtCore import Qt from PyQt5.QtGui import QTextCursor import sys class text_edit(QTextEdit): def __init__(self): super().__init__() self.setMouseTracking(True) self.setReadOnly(True) def mouseMoveEvent(self, event): position = event.pos() self.cursor = self.cursorForPosition(position) self.cursor.select(QTextCursor.LineUnderCursor) self.line = self.cursor.selectedText() if self.line !="": self.setCursor(Qt.PointingHandCursor) self.viewport().setCursor(Qt.PointingHandCursor) else: self.setCursor(Qt.ArrowCursor) self.viewport().setCursor(Qt.ArrowCursor) def mousePressEvent(self, event): print(self.line) class Fenetre_Principale(QMainWindow): def __init__(self): super().__init__() self.edit = text_edit() self.link_format = '<span style="color:blue;">{}</span>' self.destroy_format = '<span style="color:red;">{}</span>' self.edit.append(self.link_format.format("première ligne") + " " + self.destroy_format.format("X")) self.edit.append(self.link_format.format("seconde ligne")) self.edit.append(self.link_format.format("troisième ligne")) self.edit.append(self.link_format.format("")) #ligne pour permettre de retrouver 1 poitneur normal en dehors des lignes saisies self.setCentralWidget(QWidget(parent=self)) layout_vertical_global=QVBoxLayout(self.centralWidget()) layout_vertical_global.addWidget(self.edit) self.setFixedSize(600, 200) self.show() if __name__ == "__main__": appli = QApplication(sys.argv) fenetre_main = Fenetre_Principale() sys.exit(appli.exec())
Partager