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

Qt Quick Discussion :

Ajouts d'élements suivant la demande de l'utilisateur


Sujet :

Qt Quick

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 26
    Points
    26
    Par défaut Ajouts d'élements suivant la demande de l'utilisateur
    bonjours a tous.
    voila je suis débutant en qml, et je veux faire un petit projet, je veux crée une fenêtre qml qui prend sa forme selon la demande de l'utilisateur, par exemple il veux crée une fenêtre qui a un champs "text" avec deux "textField", si vous avez des idées ou des petit scripte a me balancer ca sera génial sachons que due j’utilise PyQt avec le QML.

    merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Bonjour,

    La création dynamique est sûrement la solution. Malheureusement je ne l'ai pas encore utilisé et je n'ai pas d'exemple à fournir.
    Néanmoins un exemple est fourni par Qt: Dynamic Scene Exemple

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut
    Citation Envoyé par Gojir4 Voir le message
    La création dynamique est sûrement la solution.
    Plutôt le problème (surtout pour quelqu'un qui débute…). C'est plus courant de cacher des objets ou d'utiliser des modèles (ce qui évite de gérer l'allocation de la mémoire).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    bonjour
    merci pour vos réponses, je voulez savoir comment et ou je peux enregistrer une page qml sous forme d'un module puis l'appelé quand j'aurai besoin ?
    merci

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut
    En créant ton propre composant : http://doc.qt.io/qt-5/qtqml-document...-qml-documents
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    en faite je trouve un petit souci avec le pyqt, en faite j'ai deux module je veux que le premier module démarre le deuxième module on utilisant un bouton, mais j'ai du mal a appelé le deuxième module.
    voici le premier module main.py:


    Code python : 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
              import Classe
              import sys
              from PyQt5.QtWidgets import QApplication
              from PyQt5.QtQml import QQmlApplicationEngine
     
              from PyQt5.QtCore import QObject, pyqtSlot, QVariant
     
              # Classe servant dans l'interaction.
              class MainApp(QObject):
                  def __init__(self, context, parent=None):
                         super(MainApp, self).__init__()
                         self.win = parent
                         self.win.findChild(QObject, "ObjClasse").clicked.connect(self.test3)
     
                        self.ctx = context
     
                 def test3(self):
                 print("fff")
     
            self.f1 = Classe
     
            self.f1.App(Qobject)
     
            if __name__ == "__main__":
                  app = QApplication(sys.argv)
                  engine = QQmlApplicationEngine()
                  ctx = engine.rootContext()
                  engine.load('main.qml')
                  win = engine.rootObjects()[0]
                  py_mainapp = MainApp(ctx,win)
                  ctx.setContextProperty("py_MainApp", py_mainapp)
                  win.show()
                  sys.exit(app.exec())


    et voici mon 2eme module Classe.py:


    Code python : 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
    import sys
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtQml import QQmlApplicationEngine
    from PyQt5.QtCore import QObject, pyqtSlot, QVariant,QUrl
     
    class App(QObject):
        def __init__(self, context, parent=None):
            super(App, self).__init__()
            self.win = parent
            self.win.findChild(QObject, "ok").clicked.connect(self.test)
            self.ctx = context
     
        def test(self):
     
            self.win.findChild(QObject, "labelCo").setProperty("text", "Hello world")
     
    if __name__ == "__main__":
     
        app = QApplication(sys.argv)
        engine = QQmlApplicationEngine()
        ctx = engine.rootContext()
        engine.load('Classe.qml')
        win = engine.rootObjects()[0]
        py_app = App(ctx,win)
        ctx.setContextProperty("py_App", py_app)
        win.show()
        sys.exit(app.exec())

  7. #7
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut
    Que veux-tu dire par "démarre le deuxième module" ? La façon de penser la plus probante serait plutôt de charger le deuxième module dès le démarrage de l'application, puis d'accéder à ses fonctions depuis ton code QML quand tu en as besoin (avec le mécanisme des propriétés contextuelles, par exemple, qui est bien approprié).

    D'ailleurs, que souhaites-tu comme aide ? Y a-t-il un message d'erreur ou n'arrives-tu pas à écrire le code correspondant ?
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    j'ai trouvé un souci de passé d'une page QML a une autre puis on utilisent QObject (property et setproperty).
    donc moi j'ai reussit a afficher la 2eme page QML puis quand j'utilise le setproperty j'aurai cette erreur: AttributError: 'NoneType' object has no attribute 'setProperty'.
    en faite ma deuxième page qml "Classe.qml" contient un champs de text, ce que je veux faire que quand je click sur le button de ma première page "main.qml" il y'aura la deuxième page qui apparaisse puis le champ de texte change, on ecrit "hello world".
    voici le code que j'ai utiliser:

    Code Pyqt : 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
     
     
        import Classe
        import sys
        from PyQt5.QtWidgets import QApplication
        from PyQt5.QtQml import QQmlApplicationEngine
     
        from PyQt5.QtCore import QObject, pyqtSlot, QVariant
     
     
     
          # Classe servant dans l'interaction.
     class MainApp(QObject):
        def __init__(self, context, parent=None):
            super(MainApp, self).__init__()
            self.win = parent
            self.win.findChild(QObject, "ObjClasse").clicked.connect(self.test3)
     
            self.ctx = context
     
        def test3(self):
     
     
     
            self.win1 = engine.load('Classe.qml')
     
            self.win1.findChild(QObject, "labelCo").setProperty("text", "hello world")         ##l'erreur est ici labelCo est dans le deuxiem fichier qml "Classe.qml"
     
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        engine = QQmlApplicationEngine()
        ctx = engine.rootContext()
        engine.load('main.qml')
        win = engine.rootObjects()[0]
        py_mainapp = MainApp(ctx,win)
        ctx.setContextProperty("py_MainApp", py_mainapp)
        win.show()
        sys.exit(app.exec())

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    c'est bon, c'est résolu merci pour ton aide:
    en faite il suffit d'ajouter une 2eme row dans la liste rootObject.

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def test3(self):
     
    engine.load('Classe.qml')
    win1 = engine.rootObjects()[1]
    win1.findChild(QObject, "labelCo").setProperty("text", "HELLO WORLD")

Discussions similaires

  1. [Generics] ajouter un élement dans une liste typée
    Par anitshka dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/02/2007, 11h04
  2. Réponses: 7
    Dernier message: 09/01/2007, 09h36
  3. Ajout d'élement brut ?
    Par Alexino2 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 13/10/2006, 20h37
  4. ajouter un élement à une liste ?
    Par debutant-1 dans le forum C
    Réponses: 19
    Dernier message: 19/05/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