Bonsoir à tous,
J’essaie d’apprendre PyQt5, et je trouve la documentation assez mal faite, du coup je tatonne beaucoup. Je suis aussi un débutant en python, et en programmation de manière plus générale, ce qui sera évident à la lecture de ce qui suit.
J’essaie donc de faire une classe qui affiche la fenêtre principale, et une classe fille qui y ajoute quelque chose. Voici un exemple de code.
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QAction, qApp, QWidget, QPushButton, QAction, QLineEdit, QMessageBox
class Main(QMainWindow):
def __init__(self):
super().__init__()
self.setUI()
def setUI(self):
self.setGeometry(100,100,1200,800)
self.setWindowTitle('Fenêtre principale')
self.show()
class AddSentence(Main):
def __init__(self):
super().__init__()
self.setUIAdd()
def setUIAdd(self):
self.translationField=QLineEdit(self)
self.translationField.move(400,300)
self.translationField.resize(400,50)
self.show()
monApp=QApplication(sys.argv)
fenetre=AddSentence()
sys.exit(monApp.exec_())
Ce qui se produit ici, c’est que le premier self.show()
s’exécute (celui de la classe Main
, et pas le second. Si j’enlève le premier, tout s’affiche comme je le veux, mais je ne peux plus créer un objet de cette classe qui afficherait quoi que ce soit.
Je me suis dit que ca ressemblait pas mal au if __name__ == "__main__":
, mais je n’ai pas réussi à trouver d’équivalent pour les classes.
J’ai aussi essayer de jouer avec le mro, en ajoutant if(len(self.mro())<2):
avant le premier self.show()
, mais je ne dois pas bien comprendre le concept, puisque python m’indique que AttributeError: 'AddSentence' object has no attribute 'mro'
.
Du coup, voici mes questions :
- Y a-t-il une manière spécifique de faire ce que je veux en python ? Si oui, quels seraient les mots clés à chercher, parce que je n’ai rien trouvé.
- Y a-t-il un moyen de forcer le
self.show()
à s’actuliser ? Mon problème serait résolu. - Quelle est mon erreur avec le mro ?
Merci d’avance !