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 :

Impossible d'importer une deuxième fenêtre


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut Impossible d'importer une deuxième fenêtre
    Bonsoir,

    Je suis en train de me créer une petite application sous Linux en Python 3 et Qt5 (donc PyQT5) qui est une modeste GUI pour un programme en ligne de commande. Mes fenetres sont toutes crées avec QT Designer.
    Chacune de mes fenetres se lance sans aucun probleme séparément. Toutefois, quand je veux lancer la 2eme (mes preferences) dans la 1ere j'obtiens, malgré plusieurs essais, toujours la meme erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    olivier@miriel:~/Developpement/QDvgrab/src/windows/ui$ python3 qdvgrab.py 
    Welcome to QDvGrab 0.10. 
    Hope you'll enjoy it. 
    Please report all bugs,features request and comments at olivier@openshot.org
     
    Traceback (most recent call last):
      File "qdvgrab.py", line 119, in Preferences
        if windo.exec_():
    AttributeError: 'Ui_Dialog' object has no attribute 'exec_'
    Je sais que c'est une erreur de débutant mais je suis vraiment bloqué et surtout je séche. Merci par avance.

    Dites moi si vous voulez la totalité du code. Du temps que j'y pense voici le code de ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #===========================================================================
        def Preferences(self):
            """ Run the Preferences Dialog """
            windo = Ui_Dialog()
            if windo.exec_():
                windo.show()

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Oui, c'est un peu juste comme infos pour le dépannage.

    Reprenons le principe:

    En fait, Designer dessine la fenêtre mais ne la crée pas. Pour bien comprendre, il faut lire le fichier .py que pyuic5 a créé à partir du fichier .ui de Designer: la classe crée Ui_Dialog hérite de object (classe de base de Python) et non d'une classe de PyQt!

    Il faut donc ajouter un fichier .py qui va créer la 2e fenêtre héritant de QtWidgets.Dialog (par exemple) et qu'on va configurer grâce à ce qui vient de Designer.

    Et c'est ce fichier supplémentaire qui sera appelé par la 1ère fenêtre!


    Voilà un exemple minimum mais complet:

    1- on a crée une fenêtre toute simple de type QtWidgets.Dialog avec Designer, ce qui donne un fichier qu'on va appeler dialogue_ui.ui

    2- grâce à la ligne en console "pyuic5 dialogue_ui.ui -o dialogue_ui.py", on obtient le fichier dialogue_ui.py qui contient:

    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
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'dialogue_ui.ui'
    #
    # Created by: PyQt5 UI code generator 5.4.2
    #
    # WARNING! All changes made in this file will be lost!
     
    from PyQt5 import QtCore, QtGui, QtWidgets
     
    class Ui_Dialog(object):
        def setupUi(self, Dialog):
            Dialog.setObjectName("Dialog")
            Dialog.resize(400, 300)
     
            self.retranslateUi(Dialog)
            QtCore.QMetaObject.connectSlotsByName(Dialog)
     
        def retranslateUi(self, Dialog):
            _translate = QtCore.QCoreApplication.translate
            Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
    3- on crée la fenêtre Dialogue dans un fichier supplémentaire qu'on va appeler dialogue.py, qui va importer et exploiter le fichier précédent:

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3 PyQt5
     
    import sys
    from PyQt5 import (QtWidgets)
    from dialogue_ui import Ui_Dialog
     
    #############################################################################
    class Dialogue(QtWidgets.QDialog):
     
        def __init__(self, **kwrd):
            super().__init__(**kwrd)
     
            # on définit la fenêtre crée grâce au fichier issu de Designer
            self.dialog = Ui_Dialog()
            self.dialog.setupUi(self)
    4- Enfin, on aura le code de la 1ère fenêtre (le programme principal) dans le fichier fenetre.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3
     
    import sys
    from PyQt5 import (QtWidgets, QtCore)
    from dialogue import Dialogue
     
    #############################################################################
    class Fenetre(QtWidgets.QWidget):
     
        def __init__(self, **kwrd):
            super().__init__(**kwrd)
     
            self.bouton1 = QtWidgets.QPushButton("Appel 2e fenêtre", self)
            self.bouton1.clicked.connect(self.clicbouton)
     
            posit = QtWidgets.QGridLayout()
            posit.addWidget(self.bouton1, 0, 0)
            self.setLayout(posit)
     
        def clicbouton(self):
     
            # on affiche la 2e fenêtre de dialogue
            self.fen2 = Dialogue()
            self.fen2.show()
     
    #############################################################################
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        fen = Fenetre()
        fen.show()
        sys.exit(app.exec_())
    Voilà: quand on exécute le fichier fenetre.py, il s'affiche une fenêtre avec un bouton. Quand on clique sur le bouton, la fenêtre de dialogue s'affiche.

    Si ça ne suffit pas, donne plus d'infos sur ton pb!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Au pif je dirai que, si tu as créé ton dialogue avec Designer, le dialogue n'est qu'un simple object Python. Donc n'hérite pas de QDialog.

    Si tu l'as converti avec pyuic5 et l'argument -x tu devrais trouver en fin de code ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        Dialog = QtWidgets.QDialog()
        ui = Ui_Dialog()
        ui.setupUi(Dialog)
        Dialog.show()
        sys.exit(app.exec_())
    Il te faut donc utiliser cette méthode dans ton code.
    Un truc dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        def Preferences(self):
            """ Run the Preferences Dialog """
            dial = QtWidgets.QDialog()
            windo = Ui_Dialog()
            windo.setupUi(dial)
            dial.exec_()
    Si la fenêtre se referme aussitôt (en fait on n'a pas le temps de la voir) alors utilise self.dial pour empêcher sa destruction immédiate.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    Merci à vous deux de répondre à mon appel et notamment le détail de l'explication de Tyrtamos.

    J'ai crée mon code de la manière préconisé dans la doc du site et tel que le décrit Vins cad

    pyuic5 -x preferences.ui -o preferencesui.py
    Je precise que mes fichiers sont appellés de la manière suivante :
    • preferences.ui =>preferencesui.py=>Ui_QDialog=>preferences.py
    • kviso.ui=>kvisoui.py=>Ui_kvisodialog=>kviso.py
    • QDvgrab.ui=>qdvgrabui.py=>QMainWindow=>qdvgrab.py


    Je détaille :
    -le premier fichier est le fichier ui
    -le deuxième est le fichier py généré à l'aide de la commande précedante
    -le troisième est le nom de l'objet pour l'importation. Par exemple, l'olbjet s'appelle QDialog (je sais j'ai fais mieux ) donc mon import sera Ui-QDialog
    -le quatrième est le fichier python qui lance l'appli.

    Je viens de me rendre compte que j'ai mis des majuscules pour le fichier ui de l'appli principale.


    Voici le code de ma 2eme fenetre (Preferences):

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    """
     @file
     @brief This file contains the QDvGrab Preferences dialog (i.e )
     @author Olivier Girard <olivier@openshot.org>
     
     @section LICENSE
     
     Copyright (c) 2014-2015 QDvGrab Team. This file is part of
     QDvGrab (http://www.qdvgrab.org), an open-source project
     dedicated to delivering high quality video editing and animation solutions
     to the world.
     
     QDvGrab is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.
     
     QDvGrab is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
     
     You should have received a copy of the GNU General Public License
     along with QDVgrab.  If not, see <http://www.gnu.org/licenses/>.
     """
     
    import sys
    import os
    # Need for path
    import os.path
    #Need for find library
    import shutil
    #Need for create command line
    import subprocess
     
    #need for display gui
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
     
    from preferencesui import Ui_Dialog
     
     
    class PreFerences(QDialog):
        def __init__(self):
            super(PreFerences, self).__init__()
            self.createWidgets
            self.setupUi()
            self.connectActions()
     
        #===========================================================================
        def setupUi(self):
            self.ui = Ui_Dialog()
            self.ui.setupUi(self)
     
     
        #===========================================================================
        def createWidgets(self):
            """
     
     
            """
            self.ui.lbltranscode.setEnabled(False)
     
        #===========================================================================
        def connectActions(self):
            pass
     
     
    if __name__ == "__main__":
        application = QApplication(sys.argv)
        PreFerences = PreFerences()
        PreFerences.show()
        application.exec_()
    Voici le code de la fenetre principale :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    """
     @file
     @brief This file contains the QDvGrab dialog (i.e A tool for grab videos from Dv Camecorders)
     @author Olivier Girard <olivier@openshot.org>
     
     @section LICENSE
     
     Copyright (c) 2014-2015 QDvGrab Team. This file is part of
     QDvGrab (http://www.qdvgrab.org), an open-source project
     dedicated to delivering high quality video editing and animation solutions
     to the world.
     
     QDvGrab is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.
     
     QDvGrab is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
     
     You should have received a copy of the GNU General Public License
     along with QDVgrab.  If not, see <http://www.gnu.org/licenses/>.
     """
    #Used to run it
    import sys
    import os
    #Need for path
    import os.path
    #Need for find library
    import shutil
    #Need for create command line
    import subprocess
    #need for display gui
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    #Used for call ui files
    from qdvgrabui import Ui_MainWindow
    from preferencesui import Ui_Dialog
    from kvisoui import Ui_kvisodialog
     
    app_name = "QDvGrab"
    app_version = "0.10"
    app_author = "Olivier Girard"
    author_mail = "olivier@openshot.org"
     
    class QdvGrab(QMainWindow):
     
        def __init__(self):
            super(QdvGrab, self).__init__()
            self.createWidgets()
            self.setupUi()
            self.connectActions()
            #self.centerScreen()
     
        #def centerScreen(self):
            ##geometry_window = ""
            ##self.geometry_window = geometry_window
     
            #if self.geometry_window:
                #self.resize(geometry_window[0], geometry_window[1])
            #else:
                #self.geometry_window = (self.geometry().width(), self.geometry().height())
     
            ##size_screen = QDesktopWidget().screenGeometry()
            ##self.move(((size_screen.width() - geometry_window.width())/2), ((size_screen.height() - geometry_window.height()))/2)
     
        #===========================================================================
        def setupUi(self):
            pass
     
        #===========================================================================
        def createWidgets(self):
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)
     
        #===========================================================================
        def connectActions(self):
            """ Function doing connection not done by Qt Designer """
            self.ui.btnacquisitiondv.clicked.connect(self.Recording)
            self.ui.btnrecordmpeg.clicked.connect(self.Recording)
            self.ui.btnstartrecord.clicked.connect(self.Acquisition)
            self.ui.btnpreferences.clicked.connect(self.Preferences)
            self.ui.btnhelp.clicked.connect(self.Help)
            self.ui.btnquit.clicked.connect(self.Quit)
     
        #===========================================================================
        def Recording(self):
            """ Run the type of acquisition asked """
            pass
     
        #===========================================================================
        def Acquisition(self):
            """ Run the acquisition process i.e run dvgrab """
            pass
     
        #===========================================================================
        def Help(self):
            """ Call the help webpage """
            #pass
            windo = Ui_kvisodialog()
            #windo = preferencesui()
            if windo.exec_():
                windo.show()
     
     
        #===========================================================================
        def Quit(self):
            """ Close the application """
            pass
     
        #===========================================================================
        def Preferences(self):
            """ Run the Preferences Dialog """
            #pass
            windo = Ui_Dialog()
            if windo.exec_() == QDialog.Accepted:
                windo.show()
     
        #===========================================================================
        def closeEvent(self, event):
            """ function run when the mainwindow is closed """
            event.accept()
     
    if __name__ == "__main__":
        application = QApplication(sys.argv)
        QdvGrab = QdvGrab()
        QdvGrab.show()
        print("Welcome to QDvGrab {}. \nHope you'll enjoy it. \nPlease report all bugs,"
              "features request and comments at {}\n".format(app_version, author_mail))
        application.exec_()
    J'espère que c'est beaucoup plus clair.

    Je vais tester après manger vos remarques.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    Avec le code modifié selon les recommandations de Tyrtamos, j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /usr/bin/python3.4 /home/olivier/Developpement/QDvgrab/src/windows/ui/qdvgrab.py
    Welcome to QDvGrab 0.10. 
    Hope you'll enjoy it. 
    Please report all bugs,features request and comments at olivier@openshot.org
     
    Traceback (most recent call last):
      File "/home/olivier/Developpement/QDvgrab/src/windows/ui/qdvgrab.py", line 121, in Preferences
        self.windo.show()
    AttributeError: 'Ui_Dialog' object has no attribute 'show'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #===========================================================================
        def Preferences(self):
            """ Run the Preferences Dialog """
            #pass
            self.windo = Ui_Dialog()
            self.windo.show()

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Là, tu te trompes manifestement de fichier.

    preference.py importe et lance la fenêtre de dialogue des préférences, donc dans ton code principal c'est celui là que tu dois importer et non pas le dialogue.

    À changer dans le code principal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #from preferencesui import Ui_Dialog
    from preferences import Preferences
     
    ...
        def Preferences(self):
            """ Run the Preferences Dialog """
            #windo = Ui_Dialog()
            #if windo.exec_() == QDialog.Accepted:
                #windo.show()
            self.prefs = Preferences()
    Attention, tu as mis PreFerences

    Possible que tu fasses la même erreur avec kvisoui


    Edit: Je viens de voir ton dernier message, je n'ai jamais utilisé show() pour un dialogue, seulement exec_()

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    Avec le code de Vins, et bien..................ça marche.

    Quand je disais que c'était une erreur de débutant.

    Voici le code que j'ai mis pour ceux qui passeraient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #===========================================================================
        def Preferences(self):
            """ Run the Preferences Dialog """
            dialog = QDialog()
            windo = Ui_Dialog()
            windo.setupUi(dialog)
            dialog.exec_()
    Juste une question, je m'attendais à créer un objet avec self (comme dans l'exemple de Tyrtamos) cad avec self.windo/self.dialog
    Pourquoi ?

    Merci à vous deux.

    NB: comment fait-on pour le marquer résolu ?

  8. #8
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    D'accord ça marche, dans le sens où le dialogue s'affichent mais la classe Preferences et ses méthodes elles servent à quoi alors ?

    Pour le self c'est afin d'éviter que l'objet ne soit détruit dès sa création.

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    D'accord ça marche, dans le sens où le dialogue s'affichent mais la classe Preferences et ses méthodes elles servent à quoi alors
    Effectivement, tu as raison. Cela fonctionne dans le sens où la fenêtre s'affiche mais c'est tout. J'ai modifié le code de kviso pour quelle s'affiche, là sans problème. Toutefois, cette fenêtre en temps normal (cad seule) me permet de sélectionner un fichier, de sélectionner des Qcheckbox puis d'avoir accès à un Qlable et à d'autre Qpushbutton. Or, là, j'ai bien la fenêtre mais aucune action ne se passe cad impossible de sélectionner un fichier.

    Je vais devoir disséquer tes remarques, celles de tyrtamos.

    J'ai essayé ta dernière remarque et j'ai une erreur lors de l'import et donc ma fenêtre principale ne s'affiche pas. Par contre, je n'avais pas modifier mon code dans la 2eme.

    Mon appli est une GUI à un outil en ligne de commande sous Linux dvgrab qui permet d'importer grâce à un cable firewire des vidéos prises avec un caméscope soit DV soit HDV.
    L'utilisateur voit dans l'interface principale l'espace libre utilisé, le nom du caméscope. Ensuite il a le choix en une acquisition soit en DV (par defaut) soit en HDV selon le modèle de celui-ci.
    Un bouton lance le processus avec une QProgressBAr. Un autre bouton accède aux préférences. Un autre affiche l'aide et un dernier quitte l'appli.

    Les préférences permettent à l'utilisateur de choisir la langue, de vérifier les chemins des applications utilisées (dvgrab), de définir un répertoire par défaut de destination du/des fichiers et de choisir le type d'acquisition qui déterminera le bouton activé par défaut dans l'interface principale. Tout ceci selon le principe Kiss. Tout passe par les préférences, une fois celles-ci paramétrer c'est :Je branche, je vois la place (QmessageBox si pas assez), Je transfère. Je quitte. Un playeur serait aussi un beau chalenge, peut-etre plus tard.

    L'application kviso (un ancien projet open source de 2007 en Python 2.x et Qt3 que j'ai passé en python 3 et Qt5 n'a rien à voir avec celle-ci. j'ai même commencé à modifier son code qui ne fonctionne pas. Le but de cette appli est à partir d'un fichier mpg de créer la structure d'un dvd (avec dvdauthor) et de graver celle-ci en image iso.

    J'en ai une 3eme qui me sert elle pour étudier/comprendre le fonctionnement de xml à partir d'un ensemble de presets (pour l'encodage vidéo) et récupérer/afficher les info de ceux-ci.

    Le but de ces applications est d'acquérir des connaissances différentes tout en m'étant d'abord utile avec de les diffuser à d'autres. Bien que pour 'instant elles sont basiques. La dernière me sert pour Openshot. L'autre but est d’être plus performant pour Openshot. Là mon code fonctionne sans problème.............pour l'instant.

    Je vais t'envoyer des screenshots si je retrouve mon site de partage d'images. Si tu veux la totale (cad tous les fichiers) je t'envoie cela sans problème. Je vais modifier le nom de ma méthode def preferences car elle prete à confusion.

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    Les voilà normalement .










  11. #11
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Quelle erreur d'import ?

    Ce que je comprend de ton code est ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    qdvgrab.py 
    from preferences import Preferences 
                |
                |>> preference.py
                    from preferencesui import Ui_Dialog
                                |
                                |>> preferencesui.py
                                    class Ui_Dialog()
                                    ...

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    Ta remarque sur juste le fait que la fenêtre s'affichait (et puis c'est tout) m'a fait réfléchir et comme je te le disais, j'ai disséqué les codes et explications que vous m'aviez donné tous les deux. Et j'ai trouvé la solution grâce aux explications détaillées de Tyrtamos puis de toi. J'avais un autre probleme sur un bouton (cancel) qui ne s'activait pas mais j'ai aussi trouvé la solution à force de dupliquer les programmes et de faire des modif de partout, cela peut préter des fois à conclusion.

    Si je reprends ton code, voici le bon résultat.
    qdvgrab.py
    from preferences import PreFerences
    |
    |class PreFerences
    |>> preference.py
    from preferencesui import Ui_Dialog
    |
    |>> preferencesui.py
    class Ui_Dialog()
    ...
    Ce qui revient en code pour mon fichier dvgrab.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
    18
    19
    20
    21
    # Used for call ui files
    from qdvgrabui import Ui_MainWindow
    from preferences import PreFerences
    from kviso import KvIso
     
     
    # ===========================================================================
        def Help(self):
            """ Call the help webpage """
            self.windo = KvIso()
            self.windo.exec_()
     
    # ===========================================================================
     
    # ===========================================================================
        def run_preferences_screen(self):
            """ Run the Preferences Dialog """
            self.windo = PreFerences()
            self.windo.exec_()
     
    # ===========================================================================
    Le reste n'ayant pas changé.

    Dans mon fichier preferences.py j'ai toujours mes imports habituels cad le fichierui python (ici preferencesui.py) avec le nom de l'objet définit dans Qt Designer. Idem pour l'interface principale dans le fichier qdvgrab.py
    Par contre, dans ce meme fichier, j'importe mes preferences d'une manière totalement differente (Un GRAND MERCI TYRTAMOS pour la solution donnée que ..........je ne voyais pas). from preferences est mon fichier preferences.py (qui me permettait de la lancer seule) et l'import est le nom de ma classe principale (ici la seule) de ce même fichier. C'est là la difference. Je dois reconnaitre que mes denominations preferences, PreFerences, ..... portent à confusion. Mais Kviso m'a sauvé sur ces deux plans (le dernier étant qu'elle était un peu plus qu'une fenetre vide).

    Une remarque pour vous deux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # ===========================================================================
        def run_preferences_screen(self):
            """ Run the Preferences Dialog """
            self.windo = PreFerences()
            self.windo.exec_()
     
    # ===========================================================================
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # ===========================================================================
        def run_preferences_screen(self):
            """ Run the Preferences Dialog """
            self.windo = PreFerences()
            self.windo.show()
     
    # ===========================================================================
    fonctionnent toutes les deux bien. Après laquelle choisir ? Je ne sais pas si j'ai raison mais je préfère la méthode exec_() souvent préconisée dans le livre Rapid Gui Programming With Python and QT. A voir peut-être ? au niveau de l'espace mémoire que ces fenêtres prennent ?
    En tous cas, un gros merci à vous deux. Quand à moi, cela m'apprendra à survoler/ne pas tout lire correctement les explications/code que l'on me donne pour résoudre mes problemes.

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

Discussions similaires

  1. [phpMyAdmin] Impossible d'importer une base avec phpadmin
    Par jzik_fr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 21/08/2008, 23h19
  2. impossible d'importer une image
    Par cdevl32 dans le forum Flash
    Réponses: 0
    Dernier message: 17/05/2008, 18h40
  3. coment afficher un champ dans une deuxiéme fenêtre.
    Par loic20h28 dans le forum WinDev
    Réponses: 2
    Dernier message: 03/03/2008, 14h36
  4. [Lazarus][Débutant] Afficher une deuxième fenêtre
    Par 'ti programmeur dans le forum Lazarus
    Réponses: 6
    Dernier message: 12/02/2007, 22h06
  5. Création d'une deuxième fenêtre windows
    Par stabilo dans le forum MFC
    Réponses: 5
    Dernier message: 03/03/2006, 19h44

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