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 :

Convertir un fichier .ui en plusieurs fichiers .py


Sujet :

PyQt Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut Convertir un fichier .ui en plusieurs fichiers .py
    Bonjour
    Au faite j'essaie de convertir mon fichier .ui en 3 fichiers .py
    je m'explique je travail avec QtCreator qui me génère un interface .ui
    et quand je convertis le fichier .ui en .py j'ai qu'un seul fichier .py alors que moi je veux séparer les options de mon interface pour avoir une classe mère qui fait appel aux autres classes.py
    quelqu'un a une idée ?

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Quand tu parles de QtCreator: ce n'est pas plutôt QtDesigner?

    En ce qui me concerne:

    - je dessine mes fenêtres avec QtDesigner => chaque fenêtre en .ui

    - je convertis chaque fichier .ui en .py avec pyuic4

    - je développe le logiciel principal en .py avec eclipse-pydev, en important chaque fenêtre en .py

    En faisant comme ça, on ne mélange pas plusieurs fenêtres graphiques dans le même .ui.

    Tyrtamos

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    non ce n'est pas QtDesigner mais il a les mêmes fonctionnalitées que Qt Designer.
    le problème ce que j'ai une seule fenêtre qui est composée d'un ensemble des onglets maintenant dans mon code pour plus de visibilité j'aimerais bien créer pour chaque onglet une classe .py
    donc QtCreator -ou Designer peu importe- me crée mon interface avec deux onglets par exemple et je génère un seul fichier .py ... par la suite je cherche une solution pour transformer cette classe .py en 3 classe : une classe mère qui appel les deux autres classes correspondant aux deux onglets .
    l'objectif c'est d'avoir un code plus visible et plus facile à changer après

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    d'ailleurs une autre question qui peut être débile
    quand je tape :
    QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.maFonction())
    il m'affiche un message d'erreur
    l'objectif de cette commande c'est d'appeler la fonction que j'ai crée :maFonction pour afficher son contenu en cliquant sur le bouton pushButton

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Essayes ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.pushButton.clicked.connect(MainWindow.maFonction)
    Et surtout pas de parenthèses à maFonction.

    Quand tu parles d'une application avec des onglets, tu veux dire un QTabWidget ?

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    S'il s'agit bien d'un QTabWidget:

    Je ne crois pas qu'il soit possible de "déporter" chaque onglet sur une classe séparée héritant d'un objet "onglet", car les widgets installés sur chaque onglet sont en fait "accrochés" sur le QTabWidget directement.

    J'utilise aussi QTabWidget. On peut savoir dans quel onglet on est en questionnant currentIndex(), mais l'index en question ne sert que d'aiguillage aux traitements. Après, on peut, si on veut, déporter le code relatif à chaque onglet en dehors de la classe "fenêtre" dans une fonction ou une classe séparée (héritant d'object simplement), en transmettant comme argument le QTabWidget et toutes les autres données nécessaires.

    PS: j'aimerais savoir quel intérêt d'utiliser QtCreator pour Python??? C'est un très bon logiciel pour du Qt4 en C++, mais il n'a rien de préparé pour du Python, et il n'est d'ailleurs pas installé avec PyQt4.

    Tyrtamos

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    oui c'est bien QTabWidget .
    en faite quand j'ai installé Qt Designer sous windows j'avais pas toutes les option actives . du coup j'ai changé en Qt Creator et c'est juste pour faire l'interface graphique le reste je le fais sous éclipse - j'ai installé PyQt4 -

  8. #8
    Membre chevronné Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Par défaut
    si tu veux pas t'embêter, tu peux aussi faire l'interface en la codant, c'est plus dur au début mais c'est bien plus pratique que du code généré

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    je vous explique un peu le problème:
    je veux pas déporter chaque onglet mais :
    j'ai par exemple 2 onglet de type : QTabWidget1 composé de onglet 1 et 2
    quand je clique sur Onglet 1 j'affiche un autre QTabWidget2
    et idem pour onglet 2 ( j'affiche QTabWidget 3)
    maintenant l'objectif c'est pas de séparer les onglet1 1 et 2 mais plutôt le code de QTabWidget 2 et QTabWidget 3
    je veux avoir trois classe
    classe 1: contient le code QTabWidget 1 (onglet 1 et 2)
    classe 2 : contient QTabWidget 2
    classe 3 : contient le code de QTabWidget 3
    et quand je clique sur onglet 1 j'appel la calsse 2 et pour onglet 2 class 3
    est ce que c'est possible ???

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    cboudy , c'est ce que j'ai commencé à faire de le début mais j'avais quelques difficultés et vu que je suis en stage donc je voulais pas perdre beaucoup de temps en interface graphique

  11. #11
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut, en fait rien ne t'oblige à définir le contenu de tes tabWidget dans le script principal, tu peux tout aussi bien les créer séparément, les appliquer après coup ou les importer au départ.

    un exemple minimaliste:

    maintTab.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
    34
    35
    36
    37
     
    # -*- coding: utf-8 -*-
     
    import sys
     
    from PyQt4 import QtCore, QtGui
     
    from tabTwo import TabTwo
    from tabThree import TabThree
     
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.resize(640, 480)
            MainWindow.setWindowTitle("MainWindow")
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.gridLayout = QtGui.QGridLayout(self.centralwidget)
            self.mainTab = QtGui.QTabWidget(self.centralwidget)
            self.tab = QtGui.QWidget()
            self.v_layout = QtGui.QVBoxLayout(self.tab)
            self.sub_tab = TabTwo(self.tab)
            self.v_layout.addWidget(self.sub_tab)
            self.mainTab.addTab(self.tab, "Tab 1")
            self.tab_1 = QtGui.QWidget()
            self.v_layout_1 = QtGui.QVBoxLayout(self.tab_1)
            self.sub_tab_1 = TabThree(self.tab_1)
            self.v_layout_1.addWidget(self.sub_tab_1)
            self.mainTab.addTab(self.tab_1, "Tab 2")
            self.gridLayout.addWidget(self.mainTab, 0, 0, 1, 1)
            MainWindow.setCentralWidget(self.centralwidget)
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    tabTwo.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 PyQt4 import QtCore, QtGui
     
    class TabTwo(QtGui.QTabWidget):
        def __init__(self, parent):
            super(TabTwo, self).__init__(parent)
            self.page = QtGui.QWidget(parent)
            self.addTab(self.page, "Page 1")
            # etc
    tabThree.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 PyQt4 import QtCore, QtGui
     
    class TabThree(QtGui.QTabWidget):
        def __init__(self, parent):
            super(TabThree, self).__init__(parent)
            self.onglet = QtGui.QWidget(parent)
            self.addTab(self.onglet, "Onglet 1")
            # etc
    Le tout c'est de ne pas s'emmêler les pinceaux avec les layouts et parents des divers widgets, en général quand un widget n'apparait pas c'est à cause de cela.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    tyrtamos , c'est exactement ce que j'essaie de faire maintenant
    quand je clique sur un onglet je veux appeler une autre classe qui permet d'afficher une deuxième fenêtre
    c'est pour ca j'ai importé la classe2 dans ma classe principale et j'ai fais :
    QtCore.QObject.connect(self.Onglet,QtCore.SIGNAL("clicked()", self.classe2)
    mais ca marche pas

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    VinsS merci bcp
    je vais essayer de me baser sur ton exemple pour régler mon problème
    je vous tiendrai au courant si ca marche pour moi

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    quand j'ai testé ton exemple ca marche bien
    mais quand j'ai essayé de l'adapter j'ai eu un petit souci concernant la taille de sous-onglet :page 1 et page 2 qui est trop réduit
    tu sais ca vient d'où ???
    ci joint le test de deux code :
    Images attachées Images attachées   

  15. #15
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Tiens, chez moi ca se redimensionne sans problème (Linux)

    Et si tu rajoute des layouts dans les deux sous tab,
    comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # -*- coding: utf-8 -*-
     
    from PyQt4 import QtCore, QtGui
     
    class TabTwo(QtGui.QTabWidget):
        def __init__(self, parent):
            super(TabTwo, self).__init__(parent)
            self.layout = QtGui.QVBoxLayout(self)
            self.page = QtGui.QWidget(parent)
            self.addTab(self.page, "Page 1")
            self.layout.addWidget(self.page)
            # etc

    Edit: Je viens de regarder l'image en détail, c'est l'ensemble qui ne se redimensionne pas
    ça c'est parce que tu as oublié le GridLayout général. dans mon premier code, il est définit ligne 15 et on place le widget principal dedans ligne 27.

    Tout ceci nous amenant à considérer le temps gagné en utilisant Qt Designer.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    oui ca marche , en fin
    tu as raison
    j'avais pas ajouter GridLayout car je l'avais pas utilisé lors de la création de mon interface avec Qt Creator
    merciiii bcpppppp

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

Discussions similaires

  1. [XL-2002] convertir des données d'un fichier excel en plusieurs fichiers XML
    Par 19chacha75 dans le forum Excel
    Réponses: 2
    Dernier message: 06/01/2011, 15h53
  2. Réponses: 10
    Dernier message: 27/02/2009, 17h19
  3. exporter cellules de plusieurs fichiers sur un seul fichier
    Par sapeur37 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/11/2006, 09h46
  4. Couper un fichier html en plusieurs fichiers
    Par Petitcodeur dans le forum Langage
    Réponses: 9
    Dernier message: 16/10/2006, 15h27
  5. Générer plusieurs fichiers à partir d'un fichier excel
    Par yas2006 dans le forum Documents
    Réponses: 3
    Dernier message: 02/06/2006, 17h54

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