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

GUI Python Discussion :

TTK : problème scrollbar sur onglet


Sujet :

GUI Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 25
    Points : 20
    Points
    20
    Par défaut TTK : problème scrollbar sur onglet
    Bonjour à tous,

    J'essaie de place un SCROLLBAR sur un onglet avec TTK.
    j'arrive bien à l'afficher sur chaque onglet, par contre, impossible de l rendre actif!!!

    voici mon code simplifié :
    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
    # -*- coding: iso-8859-15 -*-
    from tkinter import *
    import tkinter.ttk as ttk
     
    def add_onglet(ind):
    #-- Définition de l'onglet
           fr_onglet = Frame(ong,bd =5)
           fr_onglet.configure()  
           ong.add(fr_onglet)
     
    #-- Définition de la fenêtres pour recevoir les lignes
           fr_titre =Frame(fr_onglet, bg="pink" ,width=800, height=10)
           fr_titre.pack()
           fr_sous_titre=Frame(fr_onglet, bg="green" ,width=700, height=10)
           fr_sous_titre.pack()
           fr_parties =Frame(fr_onglet, bg="yellow" ,width=600, height=300)
     
    #-- Définition du canevas pour porter l'ascenseur
           fond=Canvas(fr_parties,width=600, height=300, bg="white") 
     
    #-- Définition de l'ascenseur sur le frame fr_parties
           s1 = Scrollbar(fr_parties, orient=VERTICAL)
           s1.config(command=fond.yview)
           fond.config(yscrollcommand=s1.set)
     
    #-- Lignes
           ligne=0
           for ligne in range(30):
              texte="Ligne "+str(ligne)
              lig=Label(fond, text =texte, bd=2, bg ="#eaffff", justify=LEFT, width =100, height=1, relief=RIDGE).pack()
     
           s1.pack(side=RIGHT,expand=Y,fill=BOTH)
           fond.pack(expand=Y,fill=BOTH)
           fr_parties.pack()
     
    #--------------------------------------------------------------------------------------------------------------------------
    root=Tk()
    root.geometry("800x300+150+150")
    root.title("64 lignes")
     
    onglet = ttk.Notebook(root, width=800, height=600)
    onglet.pack(expand ="yes" , fill ="both")
    ong=onglet
     
    w_nbong=5
    i=0
    while i < w_nbong:
        i=i+1 
        add_onglet(str(i))
     
    root.mainloop()
    Je vous remercie par avance pour aide bienveillante!!

    Bonne journée

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

    Votre code me donne le tournis car pas facile de comprendre ce que vous voulez faire.

    un ttk.Notebook est une sorte de gestionnaire de disposition : on lui associe des widgets et des labels, et il permet une "navigation" en cliquant sur les "labels".

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> app = tk.Tk()
    >>> nb = ttk.Notebook()
    >>> for ix in range(3):
    ...     f = tk.Frame(width=100, height=100)
    ...     nb.add(f, text='nb-%d' % ix)
    >>> nb.pack(fill=BOTH)
    >>> app.mainloop()
    Vous dites:
    J'essaie de place un SCROLLBAR sur un onglet avec TTK.
    mais le code associe la scrollbar a une instance de canvas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
           s1 = Scrollbar(fr_parties, orient=VERTICAL)
           s1.config(command=fond.yview)
           fond.config(yscrollcommand=s1.set)
    En gros, une scrollbar peut être associée a un widget qui "déborde" au regard de la place que lui a alloue son "parent".
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def create_frame(master=None):
        frame = tk.Frame(master)
        sb = tk.Scrollbar(frame)
        sb.pack(side=RIGHT, fill=Y)
        lb = tk.Listbox(frame, yscrollcommand=sb.set)
        # populate
        for ix in range(1000):
            lb.insert(END, str(ix))
        lb.pack(side=LEFT, fill=BOTH)
        sb.config(command=lb.yview)    
        return frame
    Puis on remplace dans le code précédent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> app = tk.Tk()
    >>> nb = ttk.Notebook(app)
    >>> for ix in range(3):
    ...     f = create_frame(app)
    ...     nb.add(f, text='nb-%d' % ix)
    >>> nb.pack(fill=BOTH)
    >>> app.mainloop()
    Dans les 2 cas, le Notebook ne sait pas ce que contiennent les "frame"... scrollbar ou sans.

    Après, pour associer Notebook et Scrollbar, il faut probablement passer par la médiation d'un Canvas mais a vous de dire ce que vous voulez.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    Bonjour wiztricks,

    Merci d'avoir pris la peine de vous pencher sur mon problème.
    Je vais essayer d'être un peu plus clair.

    Sur chaque onglet, j'affiche un nombre indéterminé de lignes qui peut excéder la taille de l'onglet.
    Chaque onglet est constitué de 3 frames :
    - titre : fr_titre
    - sous-titre : fr_sous_titre
    - fr_parties qui contient l'ensemble des lignes

    Je voudrais donc doté fr_parties d'une SCROLLBAR.
    Pour cela, j'ai créé un canvas (fond) que je place dans fr_partie que devrait recevoir la scrollbar (s1).

    j'espère que ce sera moins nébuleux...

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

    Vous pouvez mettre vos lignes dans la listbox de l'exemple que je vous ai donne.
    Que pourrais-je faire de plus?

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    je me doutais de vote suggestion.
    Le problème, c'est que sur chaque ligne, j'ai plusieurs widgets ENTRY et que je ne sais pas faire avec une LISTBOX...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    Je vais essayer de procéder différemment, merci pour vous efforts!!

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par zevulko01 Voir le message
    je me doutais de vote suggestion.
    Le problème, c'est que sur chaque ligne, j'ai plusieurs widgets ENTRY et que je ne sais pas faire avec une LISTBOX...
    Tant que vous ne posez pas le truc proprement, ça n'a aucune chance de fonctionner. "proprement" = tout mettre dans un widget qui "déborde". Puis vous gérez le débordement avec des scrollbars.
    Le soucis est dans sb.config(command=lb.yview): lb est une instance de Listbox qui grâce a sa méthode .yview saura quoi faire.
    Si vous avez un tas de widgets, il faut les mettre "dans" un autre qui gérera les .yview. Sinon, il faudra gerer la disposition a la main, i.e. réaliser le yview ad hoc.

    Un Canvas pourrait le faire, mais il faut passer par .create_widget.

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

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    Merci pour tout, je vais tâcher de me débrouiller avec tout ça!!

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

Discussions similaires

  1. [WD14] Problème de passage sur onglet
    Par Raptor92 dans le forum WinDev
    Réponses: 1
    Dernier message: 28/08/2009, 13h07
  2. [WD] Problème d'indirection sur onglet
    Par Zipyz dans le forum WinDev
    Réponses: 9
    Dernier message: 09/06/2008, 16h29
  3. Réponses: 1
    Dernier message: 14/12/2006, 22h47
  4. ScrollBar sur un TPageControl.TTabSheet
    Par Dionyzos dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/07/2004, 17h10
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

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