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

Tkinter Python Discussion :

Quel widget pour afficher le contenu d'un fichier MATLAB v7.3?


Sujet :

Tkinter Python

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut Quel widget pour afficher le contenu d'un fichier MATLAB v7.3?
    hello tout le monde

    ça faisait longtemps alors je me suis dit qu'il fallait que je revienne un peu sur le forum pour profiter de vos lumières, et exercer un peu votre sagacité!

    je découvre Python, j'ai déjà passé une semaine sur les bases & Tkinter, grace aux tutos du site , et j'ai maintenant besoin d'une info en rapport avec un cas concret: un fichier MATLAB (v7.3)

    -> je me suis fait une petite HMI permettant d'ouvrir un fichier (pymatreader), de parcourir les différentes clés/variables du fichier
    -> très bien, ça marche... en même temps, rien de très compliqué!

    là ou ça se corse maintenant
    -> afficher les variables du dictionnaire dans une liste de sélection
    -> puis afficher les data de la variable cliquée, évidemment
    -> (step 3, si 2 ok: afficher un graphique à partir de la liste des valeurs)

    donc, mes interrogations:
    1.) Tkinter suffit-il pour ce genre de chose? ou faut-il passer à une autre librairie graphique, laquelle (PlotLy, seaborn, bokeh)?
    2.) Tkinter ou autre librairie, quel widget choisir pour faire ça? éventuellement un exemple basique pour illustrer le fonctionnement (sinon je chercherai en ligne)?

    comme toujours, je continue mes recherches en ligne en attendant vos lumières.
    je n'attends jamais que ça tombe tout cuit...

    merciiiiiiiiiiiiiiiiii!!

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Environnement:

    Eclipse IDE for Enterprise Java Developers.
    Version: 2019-06 (4.12.0)
    Build id: 20190614-1200
    OS: Windows 10, v.10.0, x86_64 / win32
    Java version: 1.8.0_191
    
    Python 3.7.4
    
    Package         Version
    --------------- -------
    cycler          0.10.0
    future          0.17.1
    h5py            2.9.0
    joblib          0.13.2
    kiwisolver      1.1.0
    mat4py          0.4.2
    matplotlib      3.1.1
    numpy           1.17.0
    pandas          0.25.0
    pip             19.0.3
    pymatreader     0.0.20
    pyparsing       2.4.2
    python-dateutil 2.8.0
    pytz            2019.2
    scikit-learn    0.21.3
    scipy           1.3.1
    setuptools      41.0.1
    six             1.12.0
    xmltodict       0.12.0

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Si c'est juste pour afficher, ttk.Treeview ou une Listbox. De toutes façons, il va sans doute falloir utiliser plusieurs widgets et définir un dialogue côté utilisateur.

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

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    J'avais déjà exploré la poste de TreeView oui, mais ça ne correspond pas à ce qu'on me demande! L'entêtement des gens........
    Donc non.

    Mais, effectivement, sur la route du retour j'avais pensé à la ListBox pour les variables Matlab, vu que ses éléments sont cliquable.
    Et en gérant 2 list keys + values, avec l'index de la key, on peut afficher les data/valeurs dans un autre widget.........

    ...... aussi dans une autre ListBox du coup? Ou un autre widget plus adapté ?

    Sachant que pour chaque variable, on aura quelque chose comme ça :

    subkey1 subkey2
    val1 val1
    val2 val2
    val3 val3
    val4 val4
    val5 val5
    . .
    . .
    . .
    valn valn

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    L'intérêt d'un Treeview est que vous pouvez l'utiliser comme une Listbox (un arbre plat) et avoir des en-têtes. Après, côté widget plus adapté... tkdocs vous permet d'en faire (presque) le tour (sans compter les widgets "customs" que vous pouvez ajouter - mais c'est pas facile).

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

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Ok, donc:
    - une listebox pour les variables
    - et un treeview pour les data, avec header

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Le résultat n'est pas mal, merci!

    Encore un point cependant: je voudrais rajouter un scrolling à ma listbox
    -> j'ai cherché des exemples online mais aucun ne fonctionne chez moi........ ou pour mon cas d'apprentissage.......
    -> qui plus est, doit-on obligatoirement passer par un frame contenant listbox+scrollbar... ou, peut-on coller directement la scrollbar à la listbox (à droite et en prenant la hauteur de la listbox, of course)?


    extrait simplifié de mon code graphique:
    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
        window = Tk()
        window.geometry('1024x768+0+0')
    
        menu = Menu(window)
        new_item = Menu(menu, tearoff=0)
        new_item.add_command(label='Open', underline=0)
        new_item.add_separator() 
        window.config(menu=menu)
    
        btnOpen_logo = PhotoImage(file="C:/................/open64.png") 
        btnOpen = Button(window, text= "Open file", image=btnOpen_logo, command=openFileDialog)
        btnOpen.grid(column=1, row=0)
        btnOpen.bind("<Enter>", btOpenTextOnMouseOver)
        btnOpen.bind("<Leave>", btOpenTextOnMouseLeave)
    
            # listbox VARs
        lbl_var = Label(window, text="Variables:", font=("Arial Bold", 15))
        lbl_var.place(x=10, y=85)
        lb = Listbox(window, width=60, height=14)
        lb.place(x=10, y=120)
        lb.bind("<<ListboxSelect>>", lbOnSelect)
        scrollbar = Scrollbar(lb, orient="vertical")
        scrollbar.place(x=345, y=0)
    
            # treeview VAL
        lbl_val = Label(window, text="Values:", font=("Arial Bold", 15))
        lbl_val.place(x=400, y=85)
        tree = Treeview()
        minwidth = tree.column('#0', option='minwidth')     #minimize 1st column
        tree.column('#0', width=minwidth)                         #minimize 1st column
        tree["columns"]=("TS","VAL")
        tree.column("TS", width=150 )
        tree.column("VAL", width=150)
        tree.heading("TS", text="Timestamp", anchor='w')
        tree.heading("VAL", text="Value", anchor='w')
    
        window.mainloop()
    Nom : listbox.png
Affichages : 452
Taille : 29,9 Ko

    Que faudrait-il rajouter à mon code? Et où?

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Citation Envoyé par steph68b Voir le message
    -> qui plus est, doit-on obligatoirement passer par un frame contenant listbox+scrollbar... ou, peut-on coller directement la scrollbar à la listbox (à droite et en prenant la hauteur de la listbox, of course)?
    Vous avez des exemples ici.
    Pour ce qui est de Frame ou pas.... d'abord on n'utilise pas .place pour faire tout et n'importe quoi mais pour afficher des pop-up (par exemple).
    Pour le reste, on apprend à se servir de .grid et .pack.

    Pour le reste, la Listbox est un widget et la Scrollbar en est un autre. Il n'est pas interdit d'afficher la Scrollbar "dans" la Listbox mais dans ce cas, la Scrollbar va masquer une partie du contenu de la Listbox...
    Donc on préférera placer la Scrollbar à côté et laisser à .pack ou .grid se débrouiller pour que sa hauteur soit la même que celle de la Listbox.

    Et c'est à ce niveau qu'intervient la Frame, car si on peut dire à .pack/.grid d'étirer la Scrollbar pour qu'elle occupe toute la hauteur de la Frame qui lui est imposée par les dimensions de la Listbox... (sinon, il faut tout calculer "à la main").

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

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Alors déjà:
    1.) pack pas (encore) utilisé
    2.) grid: ce que j'en ai vu m'a vite fait passer l'envie étant donné que si dans une colonne les objets n'ont pas le même width, c'est très vite un bordel ABOMINABLE!!

    Pour le reste, la Listbox est un widget et la Scrollbar en est un autre. Il n'est pas interdit d'afficher la Scrollbar "dans" la Listbox mais dans ce cas, la Scrollbar va masquer une partie du contenu de la Listbox...
    c'est justement ce que ej ne suis pas arrivé à faire pour le moment!
    on est d'accord, pas top solution MAIS j'ai besoin de comprendre pourquoi... même si je colle un frame ensuite...

    Et c'est à ce niveau qu'intervient la Frame, car si on peut dire à .pack/.grid d'étirer la Scrollbar pour qu'elle occupe toute la hauteur de la Frame qui lui est imposée par les dimensions de la Listbox... (sinon, il faut tout calculer "à la main").
    j'ai vu que pour pack(), on peut passer un paramètre du genre FILL=Y (plus la syntaxe exacte en tête)
    par contre, rien trouvé de tel pour grid()... et le FILL=Y, il n'aime pas

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Citation Envoyé par steph68b Voir le message
    Alors déjà:
    1.) pack pas (encore) utilisé
    2.) grid: ce que j'en ai vu m'a vite fait passer l'envie étant donné que si dans une colonne les objets n'ont pas le même width, c'est très vite un bordel ABOMINABLE!!
    Il faut apprendre à vous en servir. Regardez attentivement les exemples d'effbot (le lien précédent) certains utilisent .pack, d'autres .grid.


    Citation Envoyé par steph68b Voir le message
    c'est justement ce que ej ne suis pas arrivé à faire pour le moment!
    on est d'accord, pas top solution MAIS j'ai besoin de comprendre pourquoi... même si je colle un frame ensuite...
    Avec tkinter, et pour n'importe quelle bibliothèque un peu sophistiquée, vous devez comprendre comment fonctionnent les exemples que vous avez dans les tutos.
    Même si vous ne comprenez pas tout, tout de suite, ils vous montrent les "bonnes pratiques"... Et peuvent servir de base pour construire vos codes.
    Notez que je vous ai déjà expliqué pourquoi .place était une mauvaise idée et si vous me dites que malheureusement vous ne connaissez rien d'autre côté tkinter... Ben, il va falloir prendre le temps d'apprendre, vous trouver une documentation,...

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

  11. #11
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Merci.

  12. #12
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Autre question, par rapport à une fonctionnalité qu'on me demande:

    1.) est-il possible de rajouter à mon HMI un éditeur, sous la forme par exemple un gros entry, ou un scrolltext (ou un autre widget), dans lequel on pourrait taper du code Python à faire exécuter via un bouton RUN?
    2.) comment indiquer à Python que ce code n'est pas du texte, mais du code à exécuter?

    Que ce soit avec mon Tkinter de base, ou une autre librairie graphique externe, en complément de Tkinter.

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Dans cette ancienne discussion, vous avez un exemple d'interpréteur Python dans le Widget Text de Qt et dans celui de tkinter.

    Sinon IDLE est intégré à Python et écrit avec tkinter: vous pouvez piocher dans les sources.

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

  14. #14
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Super, merci, vais explorer cette piste!

Discussions similaires

  1. Problème pour afficher le contenu d'un fichier xml en html
    Par raphael74 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 21
    Dernier message: 13/08/2009, 16h17
  2. [Reseau]FTPClient pour afficher le contenu d'un fichier
    Par boxsters dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 21/06/2006, 11h12
  3. Réponses: 18
    Dernier message: 12/06/2006, 09h39
  4. Réponses: 2
    Dernier message: 04/06/2006, 18h53
  5. Quel composant pour afficher un graphique ?
    Par tipiweb dans le forum Composants VCL
    Réponses: 6
    Dernier message: 18/06/2005, 17h39

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