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 :

M'interdit plus de 50 slots


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut M'interdit plus de 50 slots
    Bonjour,

    je suis en train d'adapter un logiciel que je développe avec PyQt pour le faire fonctionner aussi avec PySide.

    Je me trouve confronté à l'erreur suivante :
    Fail to add dynamic slot to QObject. PySide support at most 50 dynamic slots.

    Une recherche me donne par exemple cette page :
    http://qt.gitorious.com/pyside/pysid...e70d1f225f438f
    où l'on voit qu'une variable MAX_SLOTS_COUNT est effectivement fixée à 50.

    Or j'ai bien plus de 50 slots créés lors du lancement du logiciel ; la pluspart dans une procédure createActions (inspirée des exemples PyQt) sous la forme :

    self.actionSaveAsDBMy = QtGui.QAction(self.tr("SaveAsDBMy..."), self)
    self.actionSaveAsDBMy.setIcon(QtGui.QIcon("images/document-save-as.png"))
    self.actionSaveAsDBMy.setStatusTip(self.tr("SaveAsDBMyStatusTip"))
    self.actionSaveAsDBMy.triggered.connect(self.doSaveAsDBMy)

    Donc ce sont des QAction, connectés à des procédures perso.
    Je peux ainsi les mettre dans des menus ou des boutons, et ça me semblait la manière de faire.

    J'ai commenté quelques lignes de "connect" et le programme a fini par se lancer, mais évidemment avec beaucoup moins de fonctionnalités.

    Mes questions sont donc :
    * pourquoi cette limite dans PySide (qui n'est pas dans PyQt) ?
    * est-ce que ma manière de procéder n'est pas correcte ? alors comment doit on s'y prendre ? et pourquoi ça marche avec PyQt ? et pourquoi je n'ai rien trouvé dans la doc ?
    * sinon, comment contourner cette limitation ? Peut on faire des connect seulement au dernier moment ? Les défaire après utilisation ? Y a t'il une autre façon de contourner ce problème ?

    Si vous voulez voir de quoi il retourne, voici 2 liens :
    le site du projet :
    http://verac.tuxfamily.org
    le dépôt Git (voir la branche PySide) :
    http://git.tuxfamily.org/verac/python/

    Merci d'avance à ceux qui pourraient m'aider
    O-

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Le problème a déjà été rencontré, voir le bug report.
    Le design actuellement retenu par PySide n'est pas des plus judicieux et il reverront leur copie post 1.0.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Le problème a déjà été rencontré, voir le bug report.
    Le design actuellement retenu par PySide n'est pas des plus judicieux et il reverront leur copie post 1.0.

    - W
    Merci pour cette réponse rapide.
    En attendant la version 1.0, j'ai pu ainsi poursuivre mes tests en créant une classe dérivée de QObject qui me permet de détourner quelques slots.
    Pour ceux qui seraient confrontés au même problème, voici ce que j'ai fait :

    Une classe ForSlots ne servant qu'à rediriger vers les fonctions prévues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class ForSlots(QtCore.QObject):
        def __init__(self, parent=None):
            super(ForSlots, self).__init__(parent)
            self.main = parent
     
        def doChooseMatiere(self):
            self.main.doChooseMatiere()
        def doChoosePeriode(self):
            self.main.doChoosePeriode()
        # etc


    Dans la procédure init de ma fenêtre principale, je crée un objet ForSlots
    juste avant de créer les actions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class MainWindow(QtGui.QMainWindow):
        def __init__(self, translator, splash, parent=None):
            #...
            # mise en place de l'interface :
            self.forSlots = ForSlots(self)
            self.createInterface()
            self.createActions()
            self.createMenusAndButtons()

    Enfin, dans la création de quelques actions, j'ai modifié le connect comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            self.actionUndo = QtGui.QAction(self.tr("Undo"), self,
                icon=QtGui.QIcon("images/edit-undo.png"),
                statusTip=self.tr("UndoStatusTip"))
            self.actionUndo.triggered.connect(self.doUndo)
    devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            self.actionUndo = QtGui.QAction(self.tr("Undo"), self,
                icon=QtGui.QIcon("images/edit-undo.png"),
                statusTip=self.tr("UndoStatusTip"))
            self.actionUndo.triggered.connect(self.forSlots.doUndo)
    merci encore
    O-

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 04/01/2010, 11h08
  2. Impossible de créer plus d'un effect slot sur OpenAL
    Par rob_hubbard dans le forum C++
    Réponses: 0
    Dernier message: 22/05/2008, 11h30
  3. Probleme du Voyageur de Commerce, mais plus compliquée, avec des chemins interdit
    Par Midou45 dans le forum Statistiques, Data Mining et Data Science
    Réponses: 6
    Dernier message: 03/01/2008, 13h14
  4. [Datareport] Etat plus large que le papier
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/09/2002, 11h45

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