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 :

Petit nouveau avec quelques questions


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut Petit nouveau avec quelques questions
    Bonsoir,

    Cela fait maintenant une semaine que je me suis mis à python et pyqt (en utilisant qtdesigner) en remplacement de bash avec lequel j'utilisais des palliatif au manque de gui poussées...

    M'etant plongé dans pyqt et qtdesigner, je ressens un grand plaisir à tester plein de widgets :p mais je rencontre quelques soucis...

    Voila donc ma petite liste de question

    - comment fonctionne scrollToAnchor de textEdit ?
    Si j'ai bien compris, c'est censé scroller jusqu'à un texte non ?


    - quelle différence entre setHtml et setText de textEdit vu que les 2 prennent en charges les effets visuels html ?


    - Je ne comprends pas comment on fait pour récupérer la valeur du bouton d'un buttonbox : button (which)
    https://deptinfo-ensip.univ-poitiers.fr … Box.button
    À quoi correspond le which ?


    - J'ai lu qu'il était possible de créer un bouton-liste, est-ce possible via qt designer ?


    - Quelle est la différence entre les signaux clicked et activated de calendarWidget ?


    - Lorsque je veux utiliser le signal activated sur un combobox, j'utilise la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.comboBox.activated.connect(self.funct_combobox)
    Ça marche très bien et me renvoie l'index, mais je voudrais recevoir le texte et non l'index, mais mon soucis est que le signal est le même.
    Comment peut on lui indiquer quel retour nous voulons ?
    Peut on le faire avec ce genre de code ou faut il obligatoirement passer par quelque chose de plus compliqué comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QtCore.QObject.connect(self.comboBox, QtCore.SIGNAL("activated(QString)"), self.funct_combobox)

    - Est-il possible d'utiliser une variable dans une commande du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.VARIABLE.blockSignals(True)
    L'idée étant de faire une boucle qui executera cette commande pour plusieurs widget d'un coup.


    merci à vous et désolé pour ces questions qui sont surement basiques.

    Bonne nuit à vous

  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
    Salut Hizoka,

    Le scrollToAnchor(nom) fonctionnera bien si tu as une ancre de ce nom là.
    Il ne centrera pas forcément le texte de l'ancre.

    La différence entre setHtml et setText est que setText essayera de reconnaître le type de texte avant d'afficher, donc, comme dit dans la doc "Use setHtml() or setPlainText() directly to avoid text edit's guessing".

    - Je ne comprends pas comment on fait pour récupérer la valeur du bouton d'un buttonbox : button (which)
    un buttonbox, je ne vois pas trop ce que c'est, il existe quelque chose de ce nom là pour les boîtes de dialogue, mais je ne les utilise pas.

    - J'ai lu qu'il était possible de créer un bouton-liste, est-ce possible via qt designer ?
    Ça s'appelle un popup menu, et ça s'applique au QToolButton pas au QPushButton[1].
    Tu places ton bouton et dans ses propriétés, tout en bas, tu choisis popupMode > MenuButtonPopup, le menu, tu le créera séparement.

    - Quelle est la différence entre les signaux clicked et activated
    Pour n'importe quel widget ayant ce signal, activated n'est émit que par une action de l'utilisateur et pas si un changement est fait par le programme, donc, ce signal peut être identique au signal clicked pour les widgets qui ont ces deux signaux.


    Pour les signaux qui peuvent contenir divers types de données, le type peut être précisé au signal lors de la connection de cette manière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    self.comboBox.activated[int].connect(self.funct_combobox)
    self.comboBox.activated['QString'].connect(self.funct_combobox)
    Remarque: la QString est un cas particulier, il faut la mettre entre guillemets afin de la faire accepter par les api qui ne supportent plus les QString.


    - Est-il possible d'utiliser une variable dans une commande du genre :
    self.VARIABLE.blockSignals(True)
    self.VARIABLE sûrement pas, parceque ça ne veut pas dire grand chose, mais si tu places tes widgets dans une liste tu pourras les traiter en boucle, je le fais couramment.

    Voilà, bienvenue au club.



    [1] Hors Designer on peut appliquer un menu aux QPushButton

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Le scrollToAnchor(nom) fonctionnera bien si tu as une ancre de ce nom là.
    Il ne centrera pas forcément le texte de l'ancre.
    Ok, en effet j'avais pas bien compris

    La différence entre setHtml et setText est que setText essayera de reconnaître le type de texte avant d'afficher, donc, comme dit dans la doc "Use setHtml() or setPlainText() directly to avoid text edit's guessing".
    Ok, doc les 2 marchent tres bien mais pour un gain de temps autant lui inidquer directement le type.

    La buttonbox est une box verticale ou horizontale proposant une liste de boutons types icone + texte du genre : yes, No, Open, Close, Cancel...

    Citation Envoyé par La doc
    StandardButton QDialogButtonBox::standardButton ( QAbstractButton * button ) const

    Renvoie la valeur de bouton standard correspondant au bouton button donné ou NoButton si le bouton button n'est pas un bouton standard.
    En fait je ne vois pas trop à quoi correspond le ( QAbstractButton * button ) qu'il faut indiquer...


    Ça s'appelle un popup menu, et ça s'applique au QToolButton pas au QPushButton[1].
    Est-il possible de creer une liste dans qtdesigner ou faut il la taper en python ?


    Pour n'importe quel widget ayant ce signal, activated n'est émit que par une action de l'utilisateur et pas si un changement est fait par le programme, donc, ce signal peut être identique au signal clicked pour les widgets qui ont ces deux signaux.
    Petite précision qui a son importance


    Pour les signaux qui peuvent contenir divers types de données, le type peut être précisé au signal lors de la connection de cette manière.
    ...
    Remarque: la QString est un cas particulier, il faut la mettre entre guillemets afin de la faire accepter par les api qui ne supportent plus les QString.
    Mince j'avais testé les [] et () mais pas avec des ""... presque !


    self.VARIABLE sûrement pas, parceque ça ne veut pas dire grand chose, mais si tu places tes widgets dans une liste tu pourras les traiter en boucle, je le fais couramment.
    Ok et du coup tu t'y prends comment pour boucler sur tes widgets ?


    De nouvelles questions :p
    - J'ai vu qu'il y avait une concurrence entre pyqt et pyslide mais les topics remontent à 2ans, qu'en est-il aujourd'hui succinctement ?

    - QtDesigner propose également des widgets kde, ils fonctionnent de la même façon que les autres ?
    Les utiliser ajoutera-t-il des dépendances pour les utilisateurs ?

    - Je voulais ajouter un de tes widget (http://bazaar.launchpad.net/~vincent...-1.0/VWidgets/ ), la toolBox dépliable mais je n'ai pas reussis, il semble me manquer le fichier libpythonplugin.so.
    J'ai fait une recherche avec la commande apt-file mais je ne l'ai pas trouvé...
    est-ce encore obligatoire ?
    J'ai copié les fichiers dans /usr/lib/qt4/plugins/designer/python et /usr/lib/qt4/plugins/designer/python/mesWidgets

    - Est-il possible de rassembler 2 connexions en 1 (je ne pense pas mais je demande :p) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.ex_comboBox.activated["QString"].connect(self.liste_1)
    self.ex_comboBox.activated[int].connect(self.liste_1)
    - Quelle est la difference entre listWidget et listView ?
    Le 1er peut etre rempli depuis qtdesigner mais cela ne doit pas être la seul difference...


    Voilà, bienvenue au club.
    Merci beaucoup, ce n'est pas facile de passer de bash que je maîtrise pas mal à un langage plus complexe... mais quand je vois les possibilités de gui, c'est juste ultra plaisant :p

    et merci du temps que tu consacres à répondre.

  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
    OK, le buttonbox est un QDialogButtonBox.
    Il y a un exemple dans /usr/share/doc/python-qt4-doc/examples/dialogs/extension.py si tu as installé le paquet python-qt4-doc

    Pour les popupmenu on ne sait pas les créer dans le designer.

    Ok et du coup tu t'y prends comment pour boucler sur tes widgets ?
    ben, comme j'ai dis, tu les met dans une liste.

    Les widgets KDE je ne sais pas ce qu'ils sont devenus, depuis Ubuntu 12.04 ils ont disparu du designer, peut-être est-ce maintenant un paquet séparé et donc une dépendance séparée aussi.

    Pour les widgets personnalisés j'ai mis un exemples d'installation ici
    ce sont les chemins pour Qt5 il faudra que tu adaptes au chemins de Qt4.

    Les fichiers plugin ne servent que pour le designer, les widgets eux-même tu peux les intégrer directement dans ton code si c'est plus simple.

    - J'ai vu qu'il y avait une concurrence entre pyqt et pyslide mais les topics remontent à 2ans, qu'en est-il aujourd'hui succinctement ?
    PySide est relativement récent et, je pense, à jour pour Qt4 et Python 3, mais bon, c'est aussi un projet brésilien donc ça n'avance qu'entre carnaval et coupe de foot ...

  5. #5
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    OK, le buttonbox est un QDialogButtonBox.
    Il y a un exemple dans /usr/share/doc/python-qt4-doc/examples/dialogs/extension.py si tu as installé le paquet python-qt4-doc
    C'est ce que j'ai essayé à la base mais via le designer il est impossible de nommer les boutons et donc de faire appelle à eux directement.
    Mais j'ai reussis en passant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def connectActions(self):
         self.buttonBox.clicked.connect(self.buttonBoxDef)
     
    def buttonBoxDef(self, button):
        print(self.buttonBox.standardButton(button))

    ben, comme j'ai dis, tu les met dans une liste.
    Désolé mais j'ai un peu de mal à comprendre exactement comment on fait...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for widget in ["ex_dateEdit", "ex_dateTimeEdit", "ex_calendarWidget"]:
        self.widget.blockSignals(True)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for action in ["self.ex_dateEdit.blockSignals(True)", "self.ex_dateTimeEdit.blockSignals(True)", "self.ex_calendarWidget.blockSignals(True)"]:
        action
    Ne marchent évidement pas...


    Les widgets KDE je ne sais pas ce qu'ils sont devenus, depuis Ubuntu 12.04 ils ont disparu du designer, peut-être est-ce maintenant un paquet séparé et donc une dépendance séparée aussi.
    Apres une recherche avec apt-file, il s'avere que c'est le paquet kdelibs5-plugins sur ubuntu qui semble obligatoire pour Kubuntu.


    Pour les widgets personnalisés j'ai mis un exemples d'installation ici
    Ok, merci il apparaît bien dans qtdesigner.
    Ca marche nickel


    ...c'est aussi un projet brésilien donc ça n'avance qu'entre carnaval et coupe de foot ...
    Sans compter les manifs :p


    Et je fini avec une petite dernière question :
    Quelle est la différence entre listWidget et listView ?
    Le 1er peut être rempli depuis qtdesigner mais cela ne doit pas être la seul différence...

  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,

    Citation Envoyé par hizoka Voir le message
    Quelle est la différence entre listWidget et listView ?
    D'une manière générale, entre les widgets "Q...Widget" et "Q...View", la différence est que l'on donne directement des données au 1er, mais qu'on "branche" le 2e aux données par l'intermédiaire d'un "modèle".

    Pour prendre un exemple concret, j'utilise souvent un QTableView (grille comme Excel) connecté à une base de données relationnelle par un QSqlRelationalTableModel, qui permet de visualiser, trier, filtrer et modifier les données d'une table avec répercution directe sur la base de données. C'est d'autant plus pratique que n'importe quelle requête de type select qui peut créer une table provisoire peut être visualisée de la même façon. On peut donc poser des questions complexes en sql, y compris avec des expressions régulières ou des recherches de mots similaires, et voir tout de suite visuellement le résultat!

    Ce serait très compliqué d'avoir ça avec un QTableWidget, car il faudrait programmer soi-même tout l'interface.

  7. #7
    Membre éclairé
    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
    Par défaut
    Cette commande est destinée à générer des .py depuis les .ui créés dans le Designer. Par contre je pense qu'il manque des choses à la fin de ta commande ou que tu en as mis trop : && python3.3.
    Oui et non. Cela dépend de la version par défaut de Python. Jusqu'à la 13.04, pour Ubuntu/Mint c'était la 2.7.x tandis qu'à partir de la 13.10, c'est la 3.3.

    Pour vérifier quelque soit votre distribution Linux, ouvrez une console et tapez python. Vous obtiendrez en retour la version de celui-ci comme ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [olivier@manjaro ~]$ python
    Python 3.3.2 (default, Sep  6 2013, 09:30:10) 
    [GCC 4.8.1 20130725 (prerelease)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    NB: Tapez CTrl + D pour sortir de l’interpréteur de commandes.

    Tu veux faire ton application en Qt Quick ? Si c'est le cas alors ce tutoriel va effectivement t'aider sur la partie interface graphique. Je travaille actuellement sur la deuxième partie qui va permettre d'interfacer du code Pyhton en les documents QML. Si tu veux quelques pistes avant que cet article soit fait je peux te passer quelques billes.
    Personnellement, même si au début qu'on en a parlé entre nous (l'équipe du projet Open Source auquel j'appartiens) je n'étais pas très emballé, je dois dire que cela pouvait venir aussi du fait qu'il était lié à C++ et non à Python. Cela change les choses vu que l'on peu t l'utiliser avec Python.

    Je déconseille aussi énormément ce type d'import. C'est pas forcément plus lisible mais par contre ça peut vite devenir le bazar si tu créés des classes persos qui contiennent des fonctions nommées de la même manière.
    L'opposé peut etre vrai aussi pour un projet important, Non ?
    On peut peut-être aussi importer dans une ligne suivante ces propres classes à part ? ? ?
    du genre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from QtGui.PyQt5 import QMaclasseapart, QMonautreclasseapart

  8. #8
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par Cenwen Voir le message
    Oui et non. Cela dépend de la version par défaut de Python. Jusqu'à la 13.04, pour Ubuntu/Mint c'était la 2.7.x tandis qu'à partir de la 13.10, c'est la 3.3.
    Je ne devais pas avoir les yeux en face des trous lorsque j'ai écrit mon commentaire... en effet la commande était bien complété avec le script Python à lancer.

    Citation Envoyé par Cenwen Voir le message
    Personnellement, même si au début qu'on en a parlé entre nous (l'équipe du projet Open Source auquel j'appartiens) je n'étais pas très emballé, je dois dire que cela pouvait venir aussi du fait qu'il était lié à C++ et non à Python. Cela change les choses vu que l'on peu t l'utiliser avec Python.
    Je vais tacher d'avancer sur la deuxième partie assez rapidement car je pense que cela pourra en intéresser plus d'un.

    Citation Envoyé par Cenwen Voir le message
    L'opposé peut etre vrai aussi pour un projet important, Non ?
    On peut peut-être aussi importer dans une ligne suivante ces propres classes à part ? ? ?
    du genre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from QtGui.PyQt5 import QMaclasseapart, QMonautreclasseapart
    Personnellement je préfère garder une logique d'importation identique dans tous mes scripts... En règle général c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import sys
    from PyQt5 import QtWidgets
    ...
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

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

Discussions similaires

  1. Nouveau avec une question sur Xcode
    Par shub22 dans le forum XCode
    Réponses: 0
    Dernier message: 24/11/2014, 12h15
  2. [API HTML5] Premier petit jeu et quelques questions.
    Par GalliezB dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/07/2013, 19h55
  3. [KPL] Quelques questions pour l'aborder avec mon fils
    Par yiannis dans le forum Autres langages
    Réponses: 16
    Dernier message: 22/12/2005, 09h25
  4. Tout nouveau, j'arrive avec une question ^^
    Par petitedouceur dans le forum C++
    Réponses: 25
    Dernier message: 06/11/2005, 00h48

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