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 :

Questions(Conseils) sur plusieurs fonctionnalités de PyQt


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2020
    Messages : 9
    Par défaut Questions(Conseils) sur plusieurs fonctionnalités de PyQt
    Bonjour à tous,

    Je vous écris pour avoir des avis ou conseils sur comment m'orienter au vu de quelques fonctionnalités que j'aimerai rajouter à mon IHM.

    Quel est le meilleur format pour sauvegarder des données numériques ?
    Je lance mon IHM => je récupère des données d'un Analyseur de Spectre, certaines en strings d'autres avec numpy(réalisation d'un graph). J'aurais aimé crée un .save() mais je ne sais pas vers quel format me tourner
    J'ai vu .npy format numpy qui pourrait être intéressant, mais ayant des strings j'aurais aimé un format plutôt général

    Est-il possible de faire un foravec button.connect.clicked() ? Pour incrémenter une QTableWidget
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range (gotest.connect.clicked())
    QtableWidget.setItem(i,0,...)
    Dernière question, j'ai vu que c'était possible de faire des onglets comme sur Excel, qui me permettrait d'accumuler les tests mais, est il possible de rester une même page d'une IHM.
    Sur ma page de test après avoir eu les résultats, ajouter un QPushButton "REFAIRE UN TEST" sur la page qui me refera un test sur cette même page, même dispo et template mais avec les mesures du nouveau test

    Je vous remercie pour votre temps et vos réponses par avance,
    Alexis

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par AlexisM31 Voir le message
    Bonjour à tous,
    Salut

    Citation Envoyé par AlexisM31 Voir le message
    Quel est le meilleur format pour sauvegarder des données numériques ?
    Je lance mon IHM => je récupère des données d'un Analyseur de Spectre, certaines en strings d'autres avec numpy(réalisation d'un graph). J'aurais aimé crée un .save() mais je ne sais pas vers quel format me tourner
    J'ai vu .npy format numpy qui pourrait être intéressant, mais ayant des strings j'aurais aimé un format plutôt général
    En programmation MVC (Modèle, Vue, Controleur) on dissocie la Vue (l'IHM) du Modèle (technologie de stockage). Ainsi tu peux ensuite faire évoluer les deux de façons indépendantes.
    J'ai eu un truc analogue à faire une fois (des données en grand nombre à stocker) et j'ai opté pour Postgres. Ainsi je pouvais calquer une ligne de ma table "data" sur une ligne à afficher dans l'IHM. Mais bon toute technologie basée sur le big-data peut faire l'affaire...

    Citation Envoyé par AlexisM31 Voir le message
    Est-il possible de faire un for avec button.connect.clicked() ? Pour incrémenter une QTableWidget
    Exemple :
    for i in range (gotest.connect.clicked())
    QtableWidget.setItem(i,0,...)
    range() veut en paramètre un nombre. Est-ce que gotest.connect.clicked() renvoie un nombre ? Ca m'étonnerait.
    Ce que tu peux faire, c'est connecter le bouton à un slot et le slot lui il va remplir le QTableWidget. Tu peux aussi implémenter dans le QTableWidget un "clic droit" qui ouvre un menu déroulant contenant le choix "ajouter une nouvelle ligne" ou "supprimer la ligne existante" (je l'ai déjà fait c'est pas super compliqué).

    Et accessoirement la méthode exacte c'est gotest.clicked.connect() et si on veut être puriste gotest.clicked[int].connect() car le signal envoie aussi l'état du bouton.

    Citation Envoyé par AlexisM31 Voir le message
    Dernière question, j'ai vu que c'était possible de faire des onglets comme sur excel, qui me permettrait d'accumuler les tests
    Oui, le QTabWidget (à ne pas confondre avec leQTableWidget)...

    Citation Envoyé par AlexisM31 Voir le message
    mais, est il possible de rester une même page d'une IHM.
    Sur ma page de test après avoir eu les résultats, ajouter un QPushButton "REFAIRE UN TEST" sur la page qui me refera un test sur cette même page, même dispo et template mais avec les mesures du nouveau test
    Ben oui, tu mets dans ta page toutes tes widgets d'affichage de tes tests (le QTextEdit pour afficher les valeurs, le QwtPlot pour afficher le graphique, etc) et au clic bouton, tu fais un clear() de tout et tu lances le test qui va remplir les widgets...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2020
    Messages : 9
    Par défaut
    Hello,
    Merci beaucoup d'avoir prit le temps de répondre à toutes les question et de manière très claires

    Pour la sauvegarde, je vois un peu mieux la méthode MVC, je n'avais pas fait de diff entre la data et la Vue, je stocke mes datas dans un editeur de test mais je vais me pencher sur Postgres et/ou cela me permettra dans tous les cas d'avoir une idée de solution à réaliser.
    Merci également pour les autres infos qui me sont hyper utiles.

    Actuellement je me suis penché sur le QTableWidget incrémenté par un bouton.
    Alors, ca fonctionne mais j'ai une incompréhension
    Je cherche à ecrire sur la colonne 2 "test" + i. i représente la ligne de QTableWidget soit le numéro de test

    Quand je fais un print ca me l'affiche bien mais sur la QTableW, ca m'incrémente mais vers le haut et non vers le bas.
    au lieu de faire :
    1 Test 1
    2 Test 2
    3 Test 3

    J'ai :

    1 Test 3
    2 Test 2
    3 Test 1

    Voici mon code

    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
        # LISTE RECAP
            self.listmeas = QtWidgets.QTableWidget(self.centralwidget)
            self.listmeas.setGeometry(QtCore.QRect(200, 300, 400, 300))
            # self.table_widget.setEditTriggers(QAbstractItemView:NoEditTriggers)
            # self.listmeas.setRowCount(2)
            self.listmeas.setColumnCount(8)
     
        def onClick(self):
            self.val = "You have selected : " + self.cb_lna.currentText()
            self.filter = "You have selected : " + self.cb_filter.currentText()
            print(self.val)
            self.row = self.listmeas.rowCount()
            self.currentrow = self.listmeas.currentRow()
            #self.insert = self.listmeas.rowsInserted()
            print (self.row)
            #print(self.currentrow)
            #print (self.insert)
     
     
            self.listmeas.insertRow(0)
            self.listmeas.setItem(0, 2, QtWidgets.QTableWidgetItem("test " + str(self.row)))
    Pourtant je commence à insérer à la demande 0

    Merci encore,
    Très bonne journée

    Alexis

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par AlexisM31 Voir le message
    je n'avais pas fait de diff entre la data et la Vue
    C'est vrai que Qt fait un peu du "touche à tout". Il a des outils SQL, des outils "big data", des outils "gestion fichier". Beaucoup de pro Qt apprécient et en usent avec allégresse mais perso je préfère passer par des outils dédiés à chaque techno. Ainsi si un jour je change Qt par une autre IHM qui, elle, n'offre pas ces outils j'aurai toujours de mon côté mes technos disponibles.

    Citation Envoyé par AlexisM31 Voir le message
    Pourtant je commence à insérer à la demande 0
    C'est ça. Donc "test1" va en ligne 0. Ensuite "test2" va en ligne 0 et décale "test1" vers le bas. Ensuite "test3" va en ligne 0 et...

    Il te faut récupérer le nombre de rows (ok tu l'as fait), rajouter une row de plus (moi je le fais via setRowCount() mais peut-être que insertRow() que je ne connais pas peut le faire aussi, je regarderai mais là je ne suis pas chez-moi et peux pas encore regarder) puis enfin positionner l'item sur la row "nombre de rows" que tu as récupéré précédemment.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2020
    Messages : 9
    Par défaut
    Je rejoins l'idée de PyQt comme outils complet, malgré que je sois débutant sur python et encore plus PyQt je trouve ça vachement complet et, tes manipulations semblent idéalement adaptées pour des projets communs. Je vais me renseigner sur ces techno qui me sont/seront utiles

    insert.row() me permet ici, de pouvoir incrémenter et insérer des lignes sur ma QTableW. Insert.row(0) pour commencer à la ligne 0 et incrémenter avec mon bouton dans la fonction, tandis que setRowCount() prédéfini le nombre de lignes.
    Ce que je comprends pas c'est pourquoi au lieu de s'incrémenter vers le bas
    0 Test 0
    1 Test 1

    J'ai

    0 Test 2
    1 Test 1
    2 Test 0

    Il faudrait soit que je change l'ordre de remplissage soit inverser la lecture des lignes, pour ça que j’adore l'utilisation du FOR qui permet de facilement remplir un tableau, list, dict...

    Alexis

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par AlexisM31 Voir le message
    Ce que je comprends pas c'est pourquoi au lieu de s'incrémenter vers le bas
    0 Test 0
    1 Test 1

    J'ai

    0 Test 2
    1 Test 1
    2 Test 0
    Comme je t'ai dit, tu places ton item en "row 0". Donc tout nouvel item se place en row 0 et décale ceux déjà présents vers le bas.

    Citation Envoyé par AlexisM31 Voir le message
    tandis que setRowCount() prédéfini le nombre de lignes.
    Oui ça a été ma façon de procéder. Rajouter un nouvel item c'est d'abord rajouter une nouvelle ligne puis placer cet item sur la ligne qui vient d'être rajoutée. Donc d'abord je récupère le nombre de lignes présentes, puis je définis une ligne de plus puis je place l'item sur la row "nb de lignes que j'avais en début d'opération" qui est fatalement la dernière de la liste (la première commence à 0). Je dis pas que c'est la meilleure façon (dès que je rentre je teste ta solution) mais en tout cas ça marche.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/04/2009, 13h17
  2. Réponses: 4
    Dernier message: 08/10/2008, 20h47
  3. [Hibernate] Questions sur les fonctionnalités d'Hibernate
    Par KneXtasY dans le forum Hibernate
    Réponses: 1
    Dernier message: 31/05/2007, 17h41
  4. Réponses: 6
    Dernier message: 15/03/2007, 10h29
  5. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54

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