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 :

Positionnement par .grid impossible [Python 2.X]


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Par défaut Positionnement par .grid impossible
    Bonjour à tous,

    Je développe actuellement ma première application Python pour monitorer des données en provenance d'un Arduino. Le tout fonctionne plutôt bien, mais je souhaite améliorer l'interface graphique en positionnant mes labels, boutons et graphiques par la méthode .grid


    Voilà à quoi ressemble la fenêtre actuellement
    Nom : Capture.JPG
Affichages : 623
Taille : 84,9 Ko

    et voilà ce que je tente de mettre en place (les labels et boutons de chaque coté du texte "Monitoring Page")
    Nom : Capture 2.JPG
Affichages : 563
Taille : 42,9 Ko

    Je parviens bien à ce que je veux obtenir sur un bout de code à part (voir interface test.py ci-dessous)
    interface test.py

    Mais dés que je tente de l'implanter dans la partie du code qui concerne cette page (class graph_page(tk.Frame) , tout en bas du code, lignes 382 à 399), plus rien ne s'affiche du tout. (voir Data_logger_test.py ci-dessous
    Data_logger_test.py

    J'avoue que je ne comprend pas bien cette partie du code et ses conséquences
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class graph_Page(tk.Frame): # Page of the monitoring graph
     
        def __init__(self, parent, controller):
     
            tk.Frame.__init__(self,parent)
    Une bonne partie du code est héritée des tutos que j'ai suivi sur internet GUIs with Tkinter Le problème c'est qu'il n'a pas été très explicite sur les subtilités de cette partie...

    Je précise que je suis un vrai novice Python. Jusque là je me contentais de bricoler des macros dans Excel et parfois un peu de code pour Arduino... Je me suis mis au Python parce que j'ai besoin de l'outil que je suis en train d'élaborer.

    Par avance merci pour votre aide parce que là... je patauge...

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut,

    Comme on ne peut tester ton code, difficile à dire, les premières choses flagrantes sont les multiples instances de Tk et donc autant de mainloop.

    Une autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for F in (StartPage, graph_Page):
     
                frame = F(container, self)
     
                self.frames[F] = frame
     
                frame.grid(row=0, column=0, sticky="nsew")
    Ici, tu grid tes 2 frames au même endroit.

    Si tu es familier avec les tableurs, considère row et column de grid comme des cellules, le fonctionnement est un peu identique.

  3. #3
    Membre averti
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Salut,

    Comme on ne peut tester ton code, difficile à dire, les premières choses flagrantes sont les multiples instances de Tk et donc autant de mainloop.

    Une autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for F in (StartPage, graph_Page):
     
                frame = F(container, self)
     
                self.frames[F] = frame
     
                frame.grid(row=0, column=0, sticky="nsew")
    Ici, tu grid tes 2 frames au même endroit.

    Si tu es familier avec les tableurs, considère row et column de grid comme des cellules, le fonctionnement est un peu identique.
    Merci de t'être penché sur la question.

    Flute ! J'avais joint l'intégralité du code pour que justement il puisse être testé. Tant pis...
    Concernant le fonctionnement de la méthode .grid, je pense avoir saisi (après quelques tests voir le fichier joint interface test.py)

    Ce que tu semble avoir remarqué sur les multiples instances de Tk est peut-être à l'origine de mon incompréhension. Je ne comprends pas la façon dont sont "instanciées" les pages (je ne sais pas si c'est le bon terme). L'idée présentée par le gars du tuto est de créer toutes les pages et de les "appeler au dessus" lorsqu'on souhaite les afficher. Je ne sais pas si c'est une pratique courante ou souhaitable. C'est juste que c'est la seule que je connais (mal) pour le moment.

    Si tu as la possibilité de faire tourner mon code, tu verra qu'il n'y a en fait que 2 pages. La page de présentation (qui en fait ne sert pas à grand chose) et la page de monitoring.
    Peut-être faut-il que je réorganise cela d'une façon plus adaptée/conventionnelle. Aurais-tu une source d'info pour cela ?

  4. #4
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Je ne sais pas où tu as vu ce tutoriel, mais ce n'est pas une bonne méthode.

    Soit tu crées tes pages à la volée en détruisant la précédente chaque fois , soit tu gardes tes pages en mémoire (ce qui semble le mieux vu que ça peut mettre du temps à se générer) et tu jongles avec les grid et grid_forget selon la page à afficher.

    Toujours est-il que tes pages devraient chacune être affiliées à une frame comme parent, et non pas à des instances de Tk imbriquées les unes dans les autres.

    Bon, je ne connais pas du tout comment matplotlib s'interface avec tkinter, donc, ce que je dis est peut-être à prendre entre guillemets, mais je pense tout de même que c'est ce qu'il y a de mieux à faire.

  5. #5
    Membre averti
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Je ne sais pas où tu as vu ce tutoriel, mais ce n'est pas une bonne méthode.
    Ok, c'est noté.

    Citation Envoyé par bistouille Voir le message
    Toujours est-il que tes pages devraient chacune être affiliées à une frame comme parent, et non pas à des instances de Tk imbriquées les unes dans les autres.
    Je croyais que c'était justement ce que faisait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class graph_Page(tk.Frame)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class StartPage(tk.Frame):
    Citation Envoyé par bistouille Voir le message
    Bon, je ne connais pas du tout comment matplotlib s'interface avec tkinter, donc, ce que je dis est peut-être à prendre entre guillemets, mais je pense tout de même que c'est ce qu'il y a de mieux à faire.
    D'après ce que j'ai compris, on crée un "canvas" et on y associe le graph et sa barre d'outils.

    Est-ce que tu aurais une source pour bien comprendre comment agencer les différentes instances de frames pour les pages ?

  6. #6
    Membre averti
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Par défaut
    Je vais faire un tour complet du Chapitre 8 : Utilisation de fenêtres et de graphismes puis je reviendrais pour me faire expliquer ce qui m'échappe éventuellement dans les bases.

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

Discussions similaires

  1. Positionnement par GRID()
    Par santaflam dans le forum Tkinter
    Réponses: 6
    Dernier message: 08/10/2007, 19h54
  2. activation macro par défaut , impossible?
    Par scofild20 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/03/2007, 16h41
  3. débutant : envoi d'un String par socket impossible
    Par 2tsiris dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/02/2007, 18h17
  4. Filtrage par Formulaire impossible
    Par Smint dans le forum Access
    Réponses: 10
    Dernier message: 09/09/2006, 11h17
  5. [TSynMemo] Positionnement par ligne et colonne
    Par Mercilius dans le forum Composants VCL
    Réponses: 9
    Dernier message: 16/04/2003, 16h22

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