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 :

Création de slots (PyQt4)


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 55
    Par défaut Création de slots (PyQt4)
    Bonjour,

    j'ai rencontre un probleme lors de la creation de slots.

    En effet, souhaitant creer un slot lie a un bouton, j'ai bien ajoute un slot a ma MainWindow, mais lorsque j'ai tente de l'implementer (Formulaire -> Visualizer le code), j'ai obtenu l'erreur contenu dans l'image jointe.

    Pourtant j'ai bien un dossier uic ici: C:\Python26\Lib\site-packages\PyQt4\uic

    Si quelqu'un a une idee... merci a vous !!!


    note: je suis sous Windows XP, avec Python 2.6.2 et PyQT4.
    Images attachées Images attachées  

  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
    Bonjour, le message d'erreur dit 'Impossible de lancer', pourquoi lancer ? c'est un dossier.

    Qu'est-ce que tu appelle implémenter ? s'agit-il d'une gui dont le fichier a été produit en xml par QDesigner ?

    Tu peux nous montrer le code de la partie '(Formulaire -> Visualizer le code)', ça aidera à comprendre.

    vincent

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 55
    Par défaut
    Oui j'implemente une interface graphique avec QT Designer.

    Du coup j'ai cree plusieurs boutons et ajoute des signaux/slots deja existants dans QT Designer ( exemple: signal = toggled(bool), et slot = setEnabled(bool) ).

    Mais lorsque je veux implementer un nouveau slot je ne peux pas. Comme tu viens de dire, je clique sur "Formulaire -> Visualizer le code", mais j'obtiens le message d'erreur (image) et je ne peux donc faire aucun code et visualiser aucun code !!

  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
    Bon, résumons, tu as créé une interface avec QDesigner, enregistrée, donc, en .ui.

    C'est de l'XML et tu aimerais consulter ce code pour ajouter de nouveaux slots et pour cela tu préfèrerais l'avoir en Python.

    Si je me trompe, tu m'arrête, je ne vois absolument pas ce que sont 'Formulaire > visualiser le code' c'est dans le menu de ton idle ?
    moi, j'utilise Eric et gedit, alors ...

    Bref, pour avoir ton .ui en .py, en console, tu te mets dans le bon dossier et tu entres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pyuic4 _x monapply.ui -o monapply.py
    explication : -x rajoutera quelques lignes de code à la fin du fichier pour le rendre exécutable et -o désigne le nom de fichier que tu désire en sortie.

    Pour les slots que tu as créés dans le QDesigner il faudra que tu t'assures de l'emplacement des fonctions appelées, Pyuic4 rajoutant un 'self' systématiquement devant le nom.

    vincent

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 55
    Par défaut
    Ce n'est pas tout a fait ca VinsS. En fait la conversion XML > python (avec la commande pyuic4) fonctionne tres bien.

    Le probleme se situe dans l'ajout de nouveaux slots. Le truc c'est que j'aimerais les ajouter directement dans le .ui (donc via QDesigner, avant la conversion en python) et non dans le code python genere apres "pyuic4 -x ...".

    Et pour ce faire, il 'suffit' de cliquer sur 'Formulaire > Visualiser code' pour ouvrir l'editeur de texte ou je pourrais implementer mes nouveaux slots.

    Mais l'editeur de texte ne s'ouvre pas et j'obtiens la fenetre d'erreur que j'ai mise en piece jointe.

    Dis-moi si tu as compris ou si tu as encore des questions ??

  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
    OK, vu, je n'avais jamais utilisé ça.

    Mais, mais, ça y'en a pas bonne idée.

    Tout d'abord ce n'est pas un éditeur, c'est en lecture seule et pour cause, il ne serait pas normal que tu modifie le code de l'objet qui est actuellement ouvert dans le designer. C'est comme si deux applications différentes ouvraient un même fichier en édition en même temps.

    De plus c'est pas nécessairement lisible.

    Un exemple (parce que chez moi, ça marche!):

    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
     
    /********************************************************************************
    ** Form generated from reading ui file 'diaporamakn7080.ui'
    **
    ** Created: Mon Apr 26 14:25:07 2010
    **      by: Qt User Interface Compiler version 4.5.0
    **
    ** WARNING! All changes made in this file will be lost when recompiling ui file!
    ********************************************************************************/
     
    #ifndef DIAPORAMAKN7080_H
    #define DIAPORAMAKN7080_H
     
    #include <QtCore/QVariant>
    #include <QtGui/QAction>
    #include <QtGui/QApplication>
    #include <QtGui/QButtonGroup>
    #include <QtGui/QDialog>
    #include <QtGui/QGraphicsView>
    #include <QtGui/QGridLayout>
    #include <QtGui/QHeaderView>
    #include <QtGui/QLabel>
     
    QT_BEGIN_NAMESPACE
     
    class Ui_Dialog
    {
    public:
        QGridLayout *gridLayout_2;
        QGridLayout *gridLayout;
        QGraphicsView *screen;
        QLabel *zoom_lbl;
        QLabel *name_lbl;
        QLabel *title_lbl;
        QLabel *info_1_lbl;
        QLabel *info_2_lbl;
     
        void setupUi(QDialog *Dialog)
        {
            if (Dialog->objectName().isEmpty())
                Dialog->setObjectName(QString::fromUtf8("Dialog"));
            Dialog->resize(750, 646);
            QIcon icon;
            icon.addPixmap(QPixmap(QString::fromUtf8("../ui/media/oqapy_ic_48.png")), QIcon::Normal, QIcon::Off);
            Dialog->setWindowIcon(icon);
            gridLayout_2 = new QGridLayout(Dialog);
            gridLayout_2->setSpacing(0);
            gridLayout_2->setMargin(0);
            gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
            gridLayout = new QGridLayout();
            gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
            screen = new QGraphicsView(Dialog);
            screen->setObjectName(QString::fromUtf8("screen"));
            screen->setFrameShape(QFrame::NoFrame);
            screen->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
            screen->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
            screen->setSceneRect(QRectF(0, 0, 300, 200));
            screen->setRenderHints(QPainter::Antialiasing|QPainter::HighQualityAntialiasing|QPainter::SmoothPixmapTransform|QPainter::TextAntialiasing);
     
            gridLayout->addWidget(screen, 0, 0, 1, 5);
     
            zoom_lbl = new QLabel(Dialog);
            zoom_lbl->setObjectName(QString::fromUtf8("zoom_lbl"));
     
            gridLayout->addWidget(zoom_lbl, 1, 0, 1, 1);
     
            name_lbl = new QLabel(Dialog);
            name_lbl->setObjectName(QString::fromUtf8("name_lbl"));
     
            gridLayout->addWidget(name_lbl, 1, 1, 1, 1);
     
            title_lbl = new QLabel(Dialog);
            title_lbl->setObjectName(QString::fromUtf8("title_lbl"));
     
            gridLayout->addWidget(title_lbl, 1, 2, 1, 1);
     
            info_1_lbl = new QLabel(Dialog);
            info_1_lbl->setObjectName(QString::fromUtf8("info_1_lbl"));
     
            gridLayout->addWidget(info_1_lbl, 1, 3, 1, 1);
     
            info_2_lbl = new QLabel(Dialog);
            info_2_lbl->setObjectName(QString::fromUtf8("info_2_lbl"));
    Non, franchement, fais tes connect dans ton .py tu en seras maître.

    Sauf si tu m'explique que ce n'est pas possible.

    Tu peux toujours ouvrir le .ui dans ton block note mais fais une copie d'abord.

    vincent

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/11/2011, 22h55
  2. Réponses: 1
    Dernier message: 03/01/2011, 19h13
  3. [Kylix] Création d'un fichier lien
    Par DrQ dans le forum EDI
    Réponses: 2
    Dernier message: 14/05/2002, 21h30
  4. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

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