Bonsoir,
je rencontre un soucis depuis un bon moment, en effet très souvent, lorsque je ferme mon logiciel via un QPushButton qui lance un self.close, j'ai le droit à un Erreur de segmentation (core dumped).
j'ai vu qu'en utilisant setAttribute(Qt.WA_DeleteOnClose) ça réglait le souci... enfin presque...
je rencontre encore le soucis si j'utilise des QMessageBox ou autre fenêtre comme QInputDialog qui sont suivis d'un self.close().
j'ai essayé de reproduire le problème en repartant à 0 mais je ne suis pas arrivé à grand chose...
Mais ce qui m'interpelle le plus, c'est que j'arrive à contourner le problème en donnant le focus au bouton (via un clic droit ou en le définissant comme bouton par défaut).
En faisant ainsi, je n'ai JAMAIS de core dumped...
Du coup je ne pige pas du tout le problème...
J'ai essayé de reproduire le bug avec :
mais je préfère joindre mon vrai fichier.
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 #!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * class Fenetre(QWidget): def __init__(self, parent=None): super(Fenetre, self).__init__(parent) Window = QMessageBox(3, QCoreApplication.translate("main", "Tesseract langs error"), QCoreApplication.translate("main", "The subtitle language is not avaible in Tesseract list langs:\n{}"), QMessageBox.Close, self, Qt.WindowSystemMenuHint) Button = QPushButton(QIcon.fromTheme("preferences-desktop-locale", QIcon(":/img/preferences-desktop-locale.png")), QCoreApplication.translate("main", "Use another language"), Window) Window.addButton(Button, QMessageBox.YesRole) # Ajout du bouton Window.setDefaultButton(Button) # Bouton par défaut Window.exec() # Message d'information # Arret de la fonction self.close() def closeEvent(self, event): exit(0) if __name__ == "__main__": app = QApplication(sys.argv) fen = Fenetre() fen.setAttribute(Qt.WA_DeleteOnClose) sys.exit(app.exec_())
Le code de la fenêtre sera ligne 115, j'ai virer les différents tests pour ne pas que ça vous bloque.
Il suffit d'annuler l'une des 2 fenêtres qui se suivent.
Pour info ça me le fait sur différents logiciels, donc je suis surement passé à coté de quelque chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ./TesseractQt.py -l "caca" FichierBidon FichierBidon
Et jamais de problème via la croix de la fenêtre ou via un menu et un triggered.
J’espère avoir été clair... merci à vous d'avance !
Partager