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 :

tktable ou tkintertable [Python 2.X]


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut tktable ou tkintertable
    bonjour a tous,

    Je me tourne vers vous car je n'arrive pas a solutionner mon problème.J'ai choisi comme GUI, tkinter pour développer une petite application basée sur une bdd a alimenter. Je sais qu'il existe d'autres GUI mais pour l'heure, étant débutant, je trouve tkinter très facile a appréhender.

    Après moult recherches, j'ai découvert qu'il existait un widget TkTable créé par G.Polo.Je l'ai téléchargé sur sourceforge mais le .zip ne contenait pas le tktable.py.Après d'autres recherches, j'ai pu trouver le code de ce module et je l'ai manuellement enregistré en tktable.py .Bien qu'ayant intégré les fichiers aux endroits explicités par 1 un autre site, ça ne fonctionne pas. En fait sorceforge ne donne pas le détail de l'installation du module.

    J'ai consulté tous les posts du forum tkinter de "developpez" mais les infos données ne m'aident pas et commencent à dater. Que ce soit sur les sites français ou anglophone, je n'arrive pas a trouver d'infos récentes.

    Tout ça pour dire que j'aimerais une aide si possible pour trouver le wrapper de tktable en python 2.7 pour windows car tous les liens sont morts a ce jour. De plus pourrait on me donner les dossiers de destination où installer tktable.py et le reste?. Mes démarches n'ont malheureusement pas abouties et je ne vois plus où chercher.

    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    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 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Salut,

    Citation Envoyé par estrasse Voir le message
    Après moult recherches, j'ai découvert qu'il existait un widget TkTable créé par G.Polo.Je l'ai téléchargé sur sourceforge mais le .zip ne contenait pas le tktable.py.
    A la base tktable est une extension de TCL/Tk écrite en partie en C.
    tktable.py juste un wrapper qui permet au programmeur Python d'y accéder comme à tout autre widget tkinter.
    Si vous n'avez pas installé l'extension, le côté Python ne fonctionnera pas.

    La difficulté sera donc de trouver des binaires et/ou de les construire... (sachant que c'est une extension TCL).

    - W

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    merci pour votre réponse.

    J'ai trouvé le fichier qui décrit ce widget en langage python me semble t'il.Du coup je l'ai enregistré en tktable.py puisque le zip compilé a téléchargé ne le fourni pas.J'avoue que je teste a l'aveuglette sur ce coup la.
    L'autre problème est qu'on ne sait pas vraiment où l'installer.J'ai trouvé diverses pistes que j'ai testé sans succès.

    Est ce que quelqu'un aurait ou saurait où récupérer ces fichiers pour windows?

    Je ne souhaite pas passer a PYQT, la doc est super hardue.Il est vrai que pour ce dont j'ai besoin tkinter me va bien.Me manque plus qu'un objet data_grid pour parfaire mon bonheur.

    cordialement

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    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 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par estrasse Voir le message
    Est ce que quelqu'un aurait ou saurait où récupérer ces fichiers pour windows?
    Les fichiers sources de tktables (TCL) sont ici.

    Citation Envoyé par estrasse Voir le message
    Il est vrai que pour ce dont j'ai besoin tkinter me va bien. Me manque plus qu'un objet data_grid pour parfaire mon bonheur.
    Hormi vouloir à tout prix utiliser ce tktable là, une solution simple serait d'agencer des widgets avec .grid. On peut placer n'importe quel widget dans une des "cases". Si vous avez besoin de rendre la chose "scrollable", il y a plein d'exemples pour rendre une Frame "scrollable" via un Canvas.

    Vous pouvez commencer avec:
    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
    import Tkinter as tk
     
     
    class Table(tk.Frame):
        def __init__(self, master=None, row_count=10, column_count=2):
     
            tk.Frame.__init__(self, master, background="black")
            self._cells = []
            for x in range(row_count):
                row = []
                for y in range(column_count):
                    label = tk.Label(self, text="%s/%s" % (x, y), 
                                     borderwidth=0, width=10)
                    label.grid(row=x, column=y, sticky="nsew", padx=1, pady=1)
                    row.append(label)
                self._cells.append(row)
     
            for y in range(column_count):
                self.grid_columnconfigure(y, weight=1)
     
     
        def set(self, row, column, value):
            cell = self._cells[row][column]
            cell.configure(text=value)
     
    if __name__ == "__main__":
        root = tk.Tk()
        table = Table(root, 10,2)
        table.pack(side="top", fill="x")
        table.set(0,0,"coucou")
        tk.mainloop()
    C'est un exemple tout bête et assez minimaliste qui peut servir de point de départ.

    - W

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Merci Wiztricks,

    effectivement j'ai commencé a tester a créer un tableau de manière dynamique avec des label et un gestionnaire d'évènements lorsqu'on clique sur l'un d'entre eux. C'est pas que c'est dur mais puisqu'il existe un widget pourquoi s'acharner a réinventer la roue ^^.Je crois même que c'est vous qui m'aviez insufflé cette maxime alors que je débutais en python et que je bloquais sur l'unicode.

    Mais je vais regarder votre code pour le comprendre et essayer de m'en inspirer, sans pour autant abandonner l'idée d'utiliser tktable.

    Merci encore,
    cordialement

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    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 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par estrasse Voir le message
    mais puisqu'il existe un widget pourquoi s'acharner a réinventer la roue ^^.Je crois même que c'est vous qui m'aviez insufflé cette maxime alors que je débutais en python et que je bloquais sur l'unicode.
    La difficulté est de l'intégrer à votre environnement Python, autrement dit commencer par compiler un module externe TCL écrit en C. Si vous ne maîtrisez pas les savoir-faire correspondant, il sera plus facile de coder un truc vite fait que d'essayer d'utiliser la solution tktable. Autrement dit, vous êtes ici condamné à ré-inventer la roue parce que vous ne savez pas (encore) la mettre en place.

    - W

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    cher Wiztricks,

    J'ai étudié votre code et effectivement ça m'irait parfaitement.Pour parfaire mes besoins,j'ai lié a chaque label un évènement bind dans la boucle. Quand je clique sur un des labels, ça me lance le gestionnaire sans problème.J'ai testé les méthodes de l'objet event et j'ai bien les retours attendus.

    Cependant, dans le cadre d'une bdd, j'aimerais pouvoir récupérer soit un index du label sélectionné soit quelque chose qui permette d'identifier à coup sûr le label.On a bien les id par event_widget mais c'est incompréhensible pour faire de la boucle conditionnelle. Je n'ai pas trouvé comment définir soit même cet ID de widget. Au mieux pour lancer mes conditions, j'aimerais pouvoir récupérer l'attribut 'text' du label mais je n'y arrive pas avec les méthodes de l'objet event. Idem en essayant de passer d'autres paramètres à la fonction.

    Est e que cette opération est possible ou est ce le bout du bout du widget? Si ça n'est pas autorisé, je me rabattrait sur un champ de saisi de choix de la ligne a modifier.

    merci et bon week end.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    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 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Salut,

    Citation Envoyé par estrasse Voir le message
    Est e que cette opération est possible ou est ce le bout du bout du widget? Si ça n'est pas autorisé, je me rabattrait sur un champ de saisi de choix de la ligne a modifier.
    Je n'ai pas trop compris les difficultés que vous rencontriez.
    Si je traduis çà en pot pourri juste pour le fun, çà donnerait:
    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
    import tkinter as tk
     
    def do_click(btn):
        print (btn, btn['text'])
        print (btn.grid_info())
     
    def on_click(e):
        x, y = e.x, e.y
        print("x, y:", x, y)
        if isinstance(e.widget, tk.Label):
            do_click(e.widget)
     
    root = tk.Tk()
    frame = tk.Frame(root, name='labels')
    for x in range(2):
        for y in range(5):
            btn = tk.Label(frame, text='%dx%d' % (x, y), name='c_%dx%d' % (x, y))
            btn.grid(row=y, column=x)
     
    root.bind('<1>', on_click)
    frame.pack()
     
    tk.mainloop()
    à vous de voir.

    note: en récupérant le widget, vous avez sa position dans le grid via .grid_info().

    - W

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    cher Wiztricks,

    Merci c'est exactement ce qui pourrait m'aller.Vous m'avez mâché le travail.

    Il est dommage qu'il manque ce widget à cette bibliothèque assez facile d'accès au regard des autres. Dommage que les docs soient si peu pédagogiques.

    Merci encore

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

Discussions similaires

  1. Utilisation de Tktable
    Par Bobzyb dans le forum Tkinter
    Réponses: 2
    Dernier message: 23/08/2012, 13h58
  2. probleme de Tktable
    Par nancy maman dans le forum Tkinter
    Réponses: 4
    Dernier message: 04/04/2011, 23h09

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