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 :

Faire un tableau à l'ecran avec tk [Python 3.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
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Par défaut Faire un tableau à l'ecran avec tk
    Bonjour,

    Pour me lancer avec python je voudrais réaliser un IHM pour gérer mon site internet.

    Je récupère via une API du contenu d'une base (format json)

    Je voudrais afficher à l’écran un tableau composer de plusieurs colonnes dans lesquelles s’afficheront le résultat json.
    avec des couleurs de fond différentes suivant ligne paire ou impaire.
    Et la ligne sélectionner en surbrillance.
    puis afficher la fiche au clic sur une ligne.

    Du basic quoi.

    Mais voila j'y arrive pas vraiment j'ai fait le placement avec grid j'ai mon tableau mais les couleur de fond sont visible que sur les lettre et non la largeur de la colonne...

    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    """
    Usage: marques.py3 
    """
    # constantes
    __title__ ="Gestion tables marques pour le site"
    __author__="Lsa "
    __version__="0.0.1"
    __purpose__='''
    Permet de gérer les marques pour le site.
    Pour cela j'utilise mes api.
    '''
     
    from tkinter import *
    from tkinter import ttk
    #from tkinter.ttk import *
    import sys
    import os
    sys.path.append(os.path.__file__)
     
    from mesfonctions import *
     
    def marquefiche():
        """ Fiche d'une marque pour la saisie, modification """
        framepage = Frame(root, bd=1, relief='solid')
        framepage.pack(side="top", fill="both", expand=True)
        framepage.grid_columnconfigure(0, weight=0)
        framepage.grid_columnconfigure(1, weight=2)
        framepage.grid_columnconfigure(2, weight=2)
        framepage.grid_columnconfigure(3, weight=0)
     
        frameboutons = Frame(framepage, bd=0, relief='solid')
        frameboutons.grid(row=5,column=1,columnspan=4,sticky=E)
        #frameboutons.pack(side="bottom", fill="both", expand=True)
     
        labelsep=Label(framepage, text=' ')
        labeltitre = Label(framepage, text='Fiche marque', font="arial 20 bold")
        labelmarque = Label(framepage, text='Marque :')
        chmarque = Entry(framepage)
        labelpay = Label(framepage, text='Payorigine :')
        chpayorigine = Entry(framepage)
     
        labeltitre.grid(row=0,column=1,columnspan=4,sticky=W+E)
        labelmarque.grid(row=1,column=1,sticky=E)
        chmarque.grid(row=1,column=2)
        labelpay.grid(row=2,column=1,sticky=E)
        chpayorigine.grid(row=2,column=2)
     
     
        boutonvalid = Button(frameboutons, text='Valider', command=root.quit)
        boutonquit = Button(frameboutons, text='Quitter', command=root.quit)
        boutonvalid.grid(row=0, column=1, sticky=E)
        boutonquit.grid(row=0, column=2, sticky=E)
     
    def on_click(e):
        x, y = e.x, e.y
        print("x, y:", x, y)
     
    def listemarques():
        """ Liste de toutes les marques """
        framepage = Frame(root, bd=1, relief='solid')
        framepage.pack(side="top", fill="both", expand=True)
        labeltitre = Label(framepage, text='Liste des marques', font="arial 20 bold")
        labeltitre.grid(row=0,column=1,columnspan=7,sticky=W+E)
        for x in range(4):
            framepage.grid_columnconfigure(x, weight=1)
        framepage.grid_columnconfigure(5, weight=3)
        framepage.grid_columnconfigure(6, weight=3)
        framepage.config(padx='3.0m',pady='3.0m');
     
        entetecolon = ["Id","Marques","Pays","Type","Preparateur","Historique auto","Historique camions"]
        for i in range(len(entetecolon)):
            Label(framepage, text=entetecolon[i], font="Helvetica 10 bold").grid(row=1, column=i,sticky=W+E)
     
        liste = appelmarque(0)
        print(len(liste))
        for x in range(len(liste)):
            if(x%2 == 0):
                coulcar="#000000"
                coulfond="#729fcf"
            else:
                coulcar="#000000"
                coulfond="#babdb6"
            Label(framepage, text=liste[x]["id"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=0,sticky=W+E)
            Label(framepage, text=liste[x]["marque"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=1,sticky=E+W)
            Label(framepage, text=liste[x]["payorigine"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=2,sticky=E+W)
            Label(framepage, text=liste[x]["type"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=3,sticky=E+W)
            Label(framepage, text=liste[x]["preparateur"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=4,sticky=E+W)
            Label(framepage, text=liste[x]["historiqueauto"][:50], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=5,sticky=E+W)
            Label(framepage, text=liste[x]["historiquepl"][:50], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=6,sticky=E+W)
     
    #        labid[0][0].bind('<1>', on_click)
     
     
    if __name__ == "__main__":
        root = Tk()
        root.geometry("1200x800")
        root.resizable(True, True) # autoriser le redimensionnement vertical 1er true Horizontal 2 true.
        root.title(__title__)
    #    print(api_idclient)
    #    print(jeton_api)
    #    marquefiche()
        listemarques()
        # lancement de la boucle princiaple qui attend les événements
        root.mainloop()
    Si vous avez des exemples je suis preneur.

    Merci par avance.

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

    Citation Envoyé par sam69_dev Voir le message
    Mais voila j'y arrive pas vraiment j'ai fait le placement avec grid j'ai mon tableau mais les couleur de fond sont visible que sur les lettre et non la largeur de la colonne..
    Vous avez 2 choses: les dimensions d'une case de la grille et celles du widget placé dedans.
    Si vous voulez que le widget occupe toute la place, il faut jouer avec "sticky".
    Pour plus d'informations, c'est documenté (par exemple) ici.

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

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Vous avez 2 choses: les dimensions d'une case de la grille et celles du widget placé dedans.
    Si vous voulez que le widget occupe toute la place, il faut jouer avec "sticky".
    Pour plus d'informations, c'est documenté (par exemple) ici.

    - W
    Bonjour,

    Merci de votre retour.
    C'est pour cela que j'ai mis sticky=W+E, ca centre le contenu, mais dès que je met autre chose par exemple W le fond d’écran reste sur les caractères.
    Ceux qui s'explique puisse que le fond écran est défini sur le label....

    Donc il n'y que ce moyen pour mettre des données en tableau ?

    Merci.

    LS

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par sam69_dev Voir le message
    Donc il n'y que ce moyen pour mettre des données en tableau ?
    Il faut apprendre à s'en servir.
    Après, il faut poster du code pour illustrer le problème rencontré car trouver des mots en "français technique" pour raconter ce que vous voulez faire ne sera pas forcément compréhensible.

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

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Il faut apprendre à s'en servir.
    Après, il faut poster du code pour illustrer le problème rencontré car trouver des mots en "français technique" pour raconter ce que vous voulez faire ne sera pas forcément compréhensible.

    - W
    Bonjour,

    Merci pour vos retours.
    Je continu mes investigations.

    Il n'y a rien d'équivalent à QTeditor pour tkinter ?

    Merci de votre aide.

    LS

    PS : mon code est dans ma question je l'ai mis dans les balises 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
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    """
    Usage: marques.py3 
    """
    # constantes
    __title__ ="Gestion tables marques pour le site"
    __author__="Lsa "
    __version__="0.0.1"
    __purpose__='''
    Permet de gérer les marques pour le site.
    Pour cela j'utilise mes api.
    '''
     
    from tkinter import *
    from tkinter import ttk
    #from tkinter.ttk import *
    import sys
    import os
    sys.path.append(os.path.__file__)
     
    from mesfonctions import *
     
    def marquefiche():
        """ Fiche d'une marque pour la saisie, modification """
        framepage = Frame(root, bd=1, relief='solid')
        framepage.pack(side="top", fill="both", expand=True)
        framepage.grid_columnconfigure(0, weight=0)
        framepage.grid_columnconfigure(1, weight=2)
        framepage.grid_columnconfigure(2, weight=2)
        framepage.grid_columnconfigure(3, weight=0)
     
        frameboutons = Frame(framepage, bd=0, relief='solid')
        frameboutons.grid(row=5,column=1,columnspan=4,sticky=E)
        #frameboutons.pack(side="bottom", fill="both", expand=True)
     
        labelsep=Label(framepage, text=' ')
        labeltitre = Label(framepage, text='Fiche marque', font="arial 20 bold")
        labelmarque = Label(framepage, text='Marque :')
        chmarque = Entry(framepage)
        labelpay = Label(framepage, text='Payorigine :')
        chpayorigine = Entry(framepage)
     
        labeltitre.grid(row=0,column=1,columnspan=4,sticky=W+E)
        labelmarque.grid(row=1,column=1,sticky=E)
        chmarque.grid(row=1,column=2)
        labelpay.grid(row=2,column=1,sticky=E)
        chpayorigine.grid(row=2,column=2)
     
     
        boutonvalid = Button(frameboutons, text='Valider', command=root.quit)
        boutonquit = Button(frameboutons, text='Quitter', command=root.quit)
        boutonvalid.grid(row=0, column=1, sticky=E)
        boutonquit.grid(row=0, column=2, sticky=E)
     
    def on_click(e):
        x, y = e.x, e.y
        print("x, y:", x, y)
     
    def listemarques():
        """ Liste de toutes les marques """
        framepage = Frame(root, bd=1, relief='solid')
        framepage.pack(side="top", fill="both", expand=True)
        labeltitre = Label(framepage, text='Liste des marques', font="arial 20 bold")
        labeltitre.grid(row=0,column=1,columnspan=7,sticky=W+E)
        for x in range(4):
            framepage.grid_columnconfigure(x, weight=1)
        framepage.grid_columnconfigure(5, weight=3)
        framepage.grid_columnconfigure(6, weight=3)
        framepage.config(padx='3.0m',pady='3.0m');
     
        entetecolon = ["Id","Marques","Pays","Type","Preparateur","Historique auto","Historique camions"]
        for i in range(len(entetecolon)):
            Label(framepage, text=entetecolon[i], font="Helvetica 10 bold").grid(row=1, column=i,sticky=W+E)
     
        liste = appelmarque(0)
        print(len(liste))
        for x in range(len(liste)):
            if(x%2 == 0):
                coulcar="#000000"
                coulfond="#729fcf"
            else:
                coulcar="#000000"
                coulfond="#babdb6"
            Label(framepage, text=liste[x]["id"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=0,sticky=W+E)
            Label(framepage, text=liste[x]["marque"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=1,sticky=E+W)
            Label(framepage, text=liste[x]["payorigine"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=2,sticky=E+W)
            Label(framepage, text=liste[x]["type"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=3,sticky=E+W)
            Label(framepage, text=liste[x]["preparateur"], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=4,sticky=E+W)
            Label(framepage, text=liste[x]["historiqueauto"][:50], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=5,sticky=E+W)
            Label(framepage, text=liste[x]["historiquepl"][:50], font="helvetica 8 normal", fg=coulcar, bg=coulfond).grid(row=x+2, column=6,sticky=E+W)
     
    #        labid[0][0].bind('<1>', on_click)
     
     
    if __name__ == "__main__":
        root = Tk()
        root.geometry("1200x800")
        root.resizable(True, True) # autoriser le redimensionnement vertical 1er true Horizontal 2 true.
        root.title(__title__)
    #    print(api_idclient)
    #    print(jeton_api)
    #    marquefiche()
        listemarques()
        # lancement de la boucle princiaple qui attend les événements
        root.mainloop()

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par sam69_dev Voir le message
    PS : mon code est dans ma question je l'ai mis dans les balises code.
    Certes.... mais outre qu'il manque des "import" pour arriver à le faire fonctionner, il contient bien d'autres fonctionnalités qui n'aident pas à comprendre ce que vous en attendez.
    C'est pas si compliqué de ne pondre quelques lignes avec grid et quelques labels pour illustrer ce que vous racontez.
    De toutes façons, si vous voulez "apprendre" à jouer avec une IHM, il faut bien commencer par voir comment çà se comporte sur quelques exemples.
    De fait, vous allez être obligé de construire votre IHM avec les constructions proposées par tkinter et non partir à l'aventure en espérant que la magie résoudra toujours les soucis que vous pourrez rencontrer.

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

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

Discussions similaires

  1. Faire un tableau en HTML avec du SQL
    Par MasterBird dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2015, 07h20
  2. Comment faire le tableau de bord avec SpagoBI 5?
    Par Yandry dans le forum SpagoBI
    Réponses: 0
    Dernier message: 10/03/2015, 18h07
  3. [XL-2010] Faire un tableau dynamique croisé avec du texte
    Par PaulG2B dans le forum Excel
    Réponses: 5
    Dernier message: 17/04/2014, 16h32
  4. faire une capture d'ecran avec c++?!?
    Par hansaplast dans le forum C++
    Réponses: 4
    Dernier message: 11/01/2006, 10h44
  5. [XSLT] aide pour faire un tableau HTML avec fusion de lignes
    Par utwor dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 02/01/2006, 21h41

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