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 :

une table ou un tableau (scrolled)?


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Par défaut une table ou un tableau (scrolled)?
    bonjour,

    je voudrais creer avec Tkinter un tableau.
    puis placer ce tableau dans une "frame".

    mes contraintes sont les suivantes:
    - la "frame" a une taille maximale. => si necessaire, "scrolling" du tableau dans la "frame".
    - la taille des cases du tableaux s'adaptent a leur contenu (et a celui des cases de la meme ligne et colonne).
    - le contenu d'une case est exclusivement du texte.
    - le nombre de lignes et colonnes du tableau n'est pas vraiment limite.
    - certaines cases peuvent s'etendre sur plusieurs colonnes et/ou lignes.
    - possibilite de pouvoir centrer, justifier, ... le contenu d'une case dans cette meme case.
    - possibilite de changer la couleur d'une case.
    - possibilite d'avoir des separateurs de lignes, colonnes (traits), prennant en compte le fait que certaines cases sont un conglomerat de plusieurs cases et donc pas de trait a l'interieur.
    - si possible j'aimerai ne pas avoir a ajouter de bibliotheques "non-standard".

    comme il n'y a pas de "scrolledFrame" avec Tk.
    j'ai cherche un peu et j'ai trouver dans Tix l'objet "scrolledWindow"
    combine avec la methode de placement grid, j'arrive a quelque chose proche de ce que je veux.
    cf: screenShot.
    desole, je n'arrive pas a mettre le screenShot.
    voici le 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
     
    import Tix
    import Tkinter as Tk
     
    import Tix 
     
    root = Tix.Tk()
    ## root.resizable(width=False, height=False)
    ## frameMain = Tk.Frame(root)
    ## frameMain.config(bg="green")
    ## frameMain.config(width=800, height=640)
    ## frameMain.pack()
     
    ## frameResult = Tix.ScrolledWindow(frameMain)
    frameResult = Tix.ScrolledWindow(root)
    frameResult.window.config(bg="white")
    frameResult.window.config(width=400, height=320)
    frameResult.pack()
    ## frameResult.place(relx=0.5, rely=0.05, anchor="n")
    for i in range(50):
      font = ("Helvetica", 10)
      bd = 0
      rs, cs = None, None
      if (i == 0):
        font = ("Helvetica", 10+2, "bold")
        bd = 0
      for j in range(11):
        txt = "(%i,%i)"%(i,j)
        if (i == 0) and (j<3):
          ## rs = 2
          pass
        elif (i == 0) and (j==3):
          cs = 2
        elif (i == 0) and (j==4):
          continue
        elif (i == 0) and (j==5):
          cs = 2
        elif (i == 0) and (j==6):
          continue
        elif (i == 0) and (j==7):
          cs = 2
        elif (i == 0) and (j==8):
          continue
        elif (i == 0) and (j==9):
          cs = 2
        elif (i == 0) and (j==10):
          continue
        elif (i == 1) and (j<3):
          continue
        ## elif (i == 1):
          ## txt = "1"
        else:
          rs, cs = None, None
        f = Tk.Frame(frameResult.window)
        f.config(bg=f.master.cget("bg"))
        if (i>1) and (j%3 == 0):
          f.config(bg="red")
        b = Tk.Label(f)
        b.config(font=font)
        b.config(bd=bd)
        b.config(bg=b.master.cget("bg"))
        b.config(text=txt)
        ## b.pack(anchor="s")
        ## b.place(relx=0.5, rely=1, anchor="s")
        ## b.pack(side="top")
        b.pack(side="bottom")
        ## b.pack(fill="both", expand=True)
        f.grid(row=i, column=j, rowspan=rs, columnspan=cs)
     
    root.mainloop()
    mon premier probleme
    , c'est que lorsque je place le "scrolledWindow" dans une "frame"
    , je perd totalement le comportement de "scrolling".

    voila, si quelqu'un a des idees, des solutions, ...

    merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut
    Création d'un tableau avec Tkinter.

    Pour de faciliter la vie je te conseille vivement d'arrêter d'utiliser Tkinter et de prendre PyQt qui te permettra de faire ce que tu veux (un tableau par exemple) beaucoup plus facilement.

  3. #3
    Membre confirmé Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Par défaut
    je crois que j'ai trouver mon erreur:

    il faut utiliser la fonction config de l'objet Tix et non celle de la frame (t.window).
    ce qui parait logique.


    du coup ca marche.
    j'obtiens bien une "ScrolledWindow" que je peux placer dans une frame.

    le 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
     
    import Tix
    import Tkinter as Tk
     
    import Tix 
     
    root = Tix.Tk()
    root.resizable(width=False, height=False)
    frameMain = Tk.Frame(root)
    frameMain.config(bg="green")
    frameMain.config(width=800, height=640)
    frameMain.pack()
     
    frameResult = Tix.ScrolledWindow(frameMain)
    frameResult = Tix.ScrolledWindow(root)
    frameResult.window.config(bg="white")
    ## frameResult.window.config(width=400, height=320)
    frameResult.config(width=400, height=320)
    ## frameResult.maxsize(width=400, height=320)
    ## frameResult.pack()
    frameResult.place(relx=0.5, rely=0.05, anchor="n")
    ## for i in range(50):
    for i in range(10):
      font = ("Helvetica", 10)
      bd = 0
      rs, cs = None, None
      if (i == 0):
        font = ("Helvetica", 10+2, "bold")
        bd = 0
      for j in range(11):
        txt = "(%i,%i)"%(i,j)
        if (i == 0) and (j<3):
          ## rs = 2
          pass
        elif (i == 0) and (j==3):
          cs = 2
        elif (i == 0) and (j==4):
          continue
        elif (i == 0) and (j==5):
          cs = 2
        elif (i == 0) and (j==6):
          continue
        elif (i == 0) and (j==7):
          cs = 2
        elif (i == 0) and (j==8):
          continue
        elif (i == 0) and (j==9):
          cs = 2
        elif (i == 0) and (j==10):
          continue
        elif (i == 1) and (j<3):
          continue
        ## elif (i == 1):
          ## txt = "1"
        else:
          rs, cs = None, None
        f = Tk.Frame(frameResult.window)
        f.config(bg=f.master.cget("bg"))
        if (i>1) and (j%3 == 0):
          f.config(bg="red")
        b = Tk.Label(f)
        b.config(font=font)
        b.config(bd=bd)
        b.config(bg=b.master.cget("bg"))
        b.config(text=txt)
        ## b.pack(anchor="s")
        ## b.place(relx=0.5, rely=1, anchor="s")
        ## b.pack(side="top")
        b.pack(side="bottom")
        ## b.pack(fill="both", expand=True)
        f.grid(row=i, column=j, rowspan=rs, columnspan=cs, padx=4)
     
    root.mainloop()
    par contre, je me suis deplace le probleme.
    je voudrais lui specifier une taille maximale plutot qu'une taille fixe.
    et la methode "maxsize" ne fonctionne pas.

    ????

  4. #4
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Bonjour, je n'ai pas bien saisi ce que tu souhaite.

    Veut tu que ton tableau sur fond blanc s'étende sur toute la frameMain ?

    Il y a une ligne inutile dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    frameResult = Tix.ScrolledWindow(frameMain)
    frameResult = Tix.ScrolledWindow(root)
    frameResult ne peut pas contenir à la foi un objet Tix.ScrolledWindow dont le master est frameMain
    et un objet dont le master est root.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    frameMain = Tk.Frame(root)
    frameMain.config(bg="green")
    frameMain.config(width=800, height=640)
    C'est 3 lignes peuvent être remplacer par une seule mais ceci n'a aucune
    importance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    frameMain = Tk.Frame(root, bg="green", width=800, height=640)
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2007, 13h45
  2. Réponses: 1
    Dernier message: 04/05/2007, 16h59
  3. [Base Access] Stocker une Table dans un tableau
    Par La Praline dans le forum VB 6 et antérieur
    Réponses: 78
    Dernier message: 25/04/2007, 15h24
  4. Alimentation d'une table : boucle ou tableau?
    Par ALLB dans le forum Oracle
    Réponses: 5
    Dernier message: 09/05/2006, 20h29
  5. [MySQL] Lister le contenu d'une table dans un tableau HTML
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 03/04/2006, 19h40

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