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 :

Incompatibilité de type de variable (apparement) avec PyQt [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Par défaut Incompatibilité de type de variable (apparement) avec PyQt
    Bonjour tout le monde ! Depuis quelques jours, j'éprouve quelques problèmes quant au fonctionnement de mon code. J'ose espérer que vous avez la solution, ou quelque chose qui pourrait m'aider à la résolution du problème. Voici les codes en question :

    main.py :
    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
     
    # -*- coding: utf-8 -*-
    from PyQt4 import QtCore, QtGui
    import sys
    from globalui import *
     
    def main():
    	#Tous le code principal ici
    	app = QtGui.QApplication(sys.argv)
    	print("lolilol")
    	frmMain.show()
     
    	sys.exit(app.exec_())
     
     
    if __name__ == "__main__":
    	main()
    puis globalui.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    # -*- coding: utf-8 -*
    from frmMain_ui import *
    from frmTrajets_ui import *
     
    class frmMain(QtGui.QWidget):
    	def __init__(self, parent=None):
    		super(frmMain, self).__init__(parent)
    		self.ui = Ui_frmMain()
    		self.ui.setupUi(self)
    		self.ui.cmdAddTrajet.clicked.connect(self.ouvrir)
    Le tout génère ainsi cette erreur, je cite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Démarrage*: python3 /home/florian/Documents/Programmation/demo/main.py
    lolilol
    Traceback (most recent call last):
      File "/home/florian/Documents/Programmation/demo/main.py", line 16, in <module>
        main()
      File "/home/florian/Documents/Programmation/demo/main.py", line 10, in main
        frmMain.show()
    TypeError: QWidget.show(): first argument of unbound method must have type 'QWidget'
    *** Terminé avec code de retour*: 1 ***
    Merci par avance, cela fait depuis plusieurs jours que je tâche de résoudre le problème sans succès.

  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,

    Voici un exemple typique où import * participe à l'illisibilité du code, en tous cas à l'incompréhension du lecteur de passage.

    Il eut été préférable de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from globalui import frmMain, frmTrajets
    Pour ton problème, comment frmMain, arrive-t-il dans ton code main() ? grâce à l'import de globalui ? Ce n'est pas suffisant pour en utiliser la méthode show(), à ce stade de ton code frmMain n'est qu'un nom.

    Il faut l'instancier pour l'utiliser.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Voici un exemple typique où import * participe à l'illisibilité du code, en tous cas à l'incompréhension du lecteur de passage.

    Il eut été préférable de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from globalui import frmMain, frmTrajets
    Pour ton problème, comment frmMain, arrive-t-il dans ton code main() ? grâce à l'import de globalui ? Ce n'est pas suffisant pour en utiliser la méthode show(), à ce stade de ton code frmMain n'est qu'un nom.

    Il faut l'instancier pour l'utiliser.
    D'accord, donc l'instancier, signifie ainsi

    quelquechose = frmMain
    puis
    quelquechose.show()

    (Si j'ai bien compris ?)

    EDIT : Quoi qu'il en soit, ça ou pas, j'ai essayé ça ne marche pas non plus, l'erreur se fait au niveau du show dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	prout = frmMain()	
    	prout.show()

  4. #4
    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
    À la réflexion, en regardant ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    # -*- coding: utf-8 -*
    from frmMain_ui import *
    from frmTrajets_ui import *
     
    class frmMain(QtGui.QWidget):
    	def __init__(self, parent=None):
    		super(frmMain, self).__init__(parent)
    		self.ui = Ui_frmMain()
    		self.ui.setupUi(self)
    		self.ui.cmdAddTrajet.clicked.connect(self.ouvrir)
    Ui_frmMain semble tout droit sortir de Qt Designer et il y a de fortes chances qu'elle hérite de QMainWindow, tu m'arrêtes si je me trompe, donc deux questions se posent:

    .1 Pourquoi la classe frmMain doit-elle hériter de QWidget ?
    .2 Pourquoi frmMain.show() alors que ce devrait être frmMain.ui.show() ?


    Ça c'est pour commencer.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Par défaut
    Déjà je voulais tout de même te remercier pour tes réponses ^^

    Bon reprenons :

    Oui ça sort bien de QtDesigner
    1 : Parce qu'avec QtGui.QMainWindow c'est le même problème :

    J'oubliais de préciser globalui.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # -*- coding: utf-8 -*
    from frmMain_ui import *
     
    class frmMain(QtGui.QMainWindow):
    	def __init__(self, parent=None):
    		super(frmMain, self).__init__(parent)
    		self.ui = Ui_frmMain()
    		self.ui.setupUi(self)
    		self.ui.cmdAddTrajet.clicked.connect(self.ouvrir)
    J'ai toujours, je cite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Démarrage*: python3 /home/florian/Documents/Programmation/demo/main.py
    lolilol
    Traceback (most recent call last):
      File "/home/florian/Documents/Programmation/demo/main.py", line 17, in <module>
        main()
      File "/home/florian/Documents/Programmation/demo/main.py", line 11, in main
        frmMain.show()
    TypeError: QWidget.show(): first argument of unbound method must have type 'QWidget'
    *** Terminé avec code de retour*: 1 ***
    2 : Heu non parce que frmMain.ui permet l'accès aux widgets disposés sur la fenêtre, comme tu peux le constater :


  6. #6
    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
    La présence du centralWidget semble confirmer ce que je dis, c'est à dire que Ui_frmMain() est une QMainWindow.

    Donc, c'est bien sur l'ui que s'applique la méthode show().

    Quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     # -*- coding: utf-8 -*
    from frmMain_ui import *
    from frmTrajets_ui import *
     
    class frmMain(object):
    	def __init__(self):
    		super(frmMain, self).__init__()
    		self.ui = Ui_frmMain()
    		self.ui.setupUi(self)
                    self.ui.show()
    		self.ui.cmdAddTrajet.clicked.connect(self.ouvrir)

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

Discussions similaires

  1. Incompatibilité de type sur variable dans Datediff
    Par clickandgo dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/06/2013, 15h32
  2. Variables locales avec TYPE
    Par PaulBilou dans le forum SQL
    Réponses: 3
    Dernier message: 20/06/2007, 22h39
  3. Réponses: 9
    Dernier message: 26/05/2007, 14h53
  4. Réponses: 4
    Dernier message: 18/03/2007, 17h09
  5. Problème avec les types de variable
    Par binhjuventus dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/07/2006, 12h30

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