IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Erreur "setupUi() missing 1 required positional argument" que je ne saisie pas


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Par défaut Erreur "setupUi() missing 1 required positional argument" que je ne saisie pas
    Bonsoir/Bonjour tout le monde, alors voilà je me retrouve face à une erreur que je ne saisie pas du tout avec PySide... Pour bien m'expliquer je vais vous présenter ce que j'ai fait par étapes:

    1. Je suis débutant alors j'ai construit ma fenêtre avec QtDesigner
    2. J'ai effectué la commande: pyside6-uic MainWindow.ui > ui_mainwindow.py
    3. J'ai mis le contenue de "ui_mainwindow.py" dans un fichier "classes.py"
    4. Enfin pour "ouvrir" la fenêtre j'ai suivi les conseils d'ici: https://stackoverflow.com/questions/...e-using-pyside


    Mon code donne à peu près ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import sys
    from PySide6 import QtCore, QtGui
    from classes import *  # "Ui_MainWindow" et le reste se trouve ici
     
    class MainWindow(QMainWindow):
    	def __init__(self):
    		QMainWindow.__init__(self)
    		self.ui = Ui_MainWindow.setupUi(self)
     
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())
    Sauf que j'obtiens cette erreur que je n'arrive pas à saisir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "C:\Users\user\Desktop\P-Tube\main.py", line 20, in <module>
        window = MainWindow()
      File "C:\Users\user\Desktop\P-Tube\main.py", line 16, in __init__
        self.ui = Ui_MainWindow.setupUi(self)
    TypeError: setupUi() missing 1 required positional argument: 'MainWindow'
    Donc je change la "ligne 16" en mettant "self.ui = Ui_MainWindow.setupUi(self, MainWindow)" en me disant que c'est bizarre et évidemment problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Traceback (most recent call last):
      File "C:\Users\user\Desktop\P-Tube\main.py", line 20, in <module>
        window = MainWindow()
      File "C:\Users\user\Desktop\P-Tube\main.py", line 16, in __init__
        self.ui = Ui_MainWindow.setupUi(self, MainWindow)
      File "C:\Users\user\Desktop\P-Tube\classes.py", line 30, in setupUi
        if not MainWindow.objectName():
    TypeError: unbound method QObject.objectName() needs an argument
    Alors si quelqu'un pourrait m'aiguiller vers ce que je n'ai pas saisie car c'est pas la première façon que j'essaye pour la faire marcher et là je sèche, toujours des erreurs... Merci d'avance à tous !

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Pas nécessaire de faire des héritages dans toutes les directions.

    Ça ira mieux comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Main:
        def __init__(self):
            w = QMainWindow()
            self.ui = Ui_MainWindow(w)
            self.ui.setupUi()
     
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Main()

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Par défaut
    Merci pour votre réponse rapide ! Je viens de l'essayer et je ne comprend toujours pas, maintenant j'ai une erreur disant que Ui_MainWindow() ne prend pas d'argument (?) alors que si je l'enlève il me dit bien qu'il en manque un ce qui est logique, ça me perd complètement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class MainWindow:
        def __init__(self):
            w = QMainWindow()
            self.ui = Ui_MainWindow(w)
            self.ui.setupUi()
     
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = MainWindow()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "C:\Users\user\Desktop\P-Tube\main.py", line 21, in <module>
        window = MainWindow()
      File "C:\Users\user\Desktop\P-Tube\main.py", line 16, in __init__
        self.ui = Ui_MainWindow(w)
    TypeError: Ui_MainWindow() takes no arguments

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par bibifoot Voir le message
    Sauf que j'obtiens cette erreur que je n'arrive pas à saisir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "C:\Users\user\Desktop\P-Tube\main.py", line 20, in <module>
        window = MainWindow()
      File "C:\Users\user\Desktop\P-Tube\main.py", line 16, in __init__
        self.ui = Ui_MainWindow.setupUi(self)
    TypeError: setupUi() missing 1 required positional argument: 'MainWindow'
    Ca airait été bien de nous filer aussi le code de UI_MainWindow plutôt que de nous forcer à le crer nous-même.
    La méthode setupUi a la signature suivante: def setupUi(self, MainWindow). Le premier paramètre "self" représente l'instance de l'objet qui contient cette méthode (une instance de Ui_MainWindow donc).
    Et toi tu l'appelles en tant que méthode statique => Ui_MainWindow.setupUi(...). Mais Ui_MainWindow ce n'est pas une instance, c'est une classe. Or la méthode setupUi() n'est pas une méthode de classe (méthode statique) mais une méthode d'instance.
    C'est exactement comme si tu avais écrit...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class cercle:
    	def __init__(self, r=0): self.r=r
    	def perimetre(self): return 2*self.r * 3.14
    ...et que tu l'appelles ainsi: res=cercle.perimetre() alors qu'il faut d'abord instancier cercle (c=cercle(5)) pour pouvoir enfin calculer le prérimètre de cette instance particulière (res=c.perimetre()).

    Remplace self.ui = Ui_MainWindow.setupUi(self) par self.ui = Ui_MainWindow().setupUi(self).

    Citation Envoyé par bibifoot Voir le message
    J'ai effectué la commande: pyside6-uic MainWindow.ui > ui_mainwindow.py
    Rajoute un "-x" dans ta commande et tu obtiendras directement un exécutable permettant et de tester ta fenêtre et de regarder comment les méthodes sont appelées.

    Citation Envoyé par bibifoot Voir le message
    Merci pour votre réponse rapide ! Je viens de l'essayer et je ne comprend toujours pas, maintenant j'ai une erreur disant que Ui_MainWindow() ne prend pas d'argument (?) alors que si je l'enlève il me dit bien qu'il en manque un ce qui est logique, ça me perd complètement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class MainWindow:
        def __init__(self):
            w = QMainWindow()
            self.ui = Ui_MainWindow(w)
            self.ui.setupUi()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "C:\Users\user\Desktop\P-Tube\main.py", line 21, in <module>
        window = MainWindow()
      File "C:\Users\user\Desktop\P-Tube\main.py", line 16, in __init__
        self.ui = Ui_MainWindow(w)
    TypeError: Ui_MainWindow() takes no arguments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class MainWindow:
        def __init__(self):
            w = QMainWindow()
            self.ui = Ui_MainWindow()
            self.ui.setupUi(w)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Par défaut
    Pardon pour le retard mais merci beaucoup pour cette réponse détaillé je vais prendre le temps pour tout comprendre car j'avais finalement pu lancer la fenêtre avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self):
            super(MainWindow, self).__init__()
            self.setupUi(self)
     
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()
    Mais je vais retravailler ça avec ce que vous m'avez donner comme info pour bien tout comprendre car j'avoue avoir commencer à utiliser Qt les mains dans les poches et c'est pas bon du tout ! x)

    Merci encore je mets en résolu

    (Et pardon aussi pour le code manquant, j'y ferai attention si jamais)

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bibifoot Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self):
            super(MainWindow, self).__init__()
            self.setupUi(self)
     
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()
    Il faut faire attention avec le double héritage car Qt ne l'accepte pas entre deux objets Qt différents (ex un QMainWindow et un QLabel)

    Citation Envoyé par bibifoot Voir le message
    car j'avoue avoir commencer à utiliser Qt les mains dans les poches et c'est pas bon du tout ! x)
    https://pyqt.developpez.com/telechar.../47/Hello-Word
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] TypeError: <lambda>() missing 1 required positional argument: 'b'
    Par fkglaa dans le forum Général Python
    Réponses: 9
    Dernier message: 19/10/2020, 14h30
  2. TypeError: Entry_1() missing 1 required positional argument
    Par abcbbm dans le forum Général Python
    Réponses: 8
    Dernier message: 13/05/2020, 17h32
  3. TypeError: f() missing 1 required positional argument: 'd'
    Par Gailletan2 dans le forum Général Python
    Réponses: 3
    Dernier message: 08/05/2019, 13h34
  4. [Python 3.X] Probleme de TypeError: <lambda>() missing 1 required positional argument: 'b'
    Par Tonivege dans le forum Général Python
    Réponses: 7
    Dernier message: 20/02/2018, 13h58
  5. Réponses: 2
    Dernier message: 23/08/2016, 11h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo