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 :

Lier une scrollbar à un canvas contenant des widgets [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Lier une scrollbar à un canvas contenant des widgets
    Bonjour j'aimerais lier une scrollbar à un canvas contenant un certain nombre de widget dont la taille n'est pas connue au préalable et cela pour chaque Tab d'un notebook.
    J'ai trouvé plusieurs post en parlant déjà mais aucun ne semble résoudre mon problème.
    Voici mon code actuel sans les différentes tentatives pour lier les scrollbar.

    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
     
    from tkinter import *
    from tkinter import ttk
     
     
    n1,n2 = int(input('Nb tab :')),int(input('Nb label :'))
     
    fen = Tk()
     
    nb = ttk.Notebook(fen)
     
    for i in range(n1):
        fr = Frame(nb)
        nb.add(fr,text='Tab ' +str(i))
     
        can = Canvas(fr)
        can.pack(side=TOP,anchor=NW)
     
        for j in range(n2):
            Label(can,text='Label '+str(j)).pack(side=LEFT)
     
        Scrollbar(fr,orient=HORIZONTAL).pack(side=BOTTOM,fill=X)
     
    nb.pack(fill=BOTH)
    Merci d'avance.

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

    Il faut procéder comme cela est fait dans cette discussion récente i.e. mettre les widgets dans une Frame, en faire un widget du Canvas, ...

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Il faut procéder comme cela est fait dans cette discussion récente i.e. mettre les widgets dans une Frame, en faire un widget du Canvas, ...

    - W
    Merci beaucoup, je n'avais pas pensé à mettre les widgets dans une frame.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Juste un petit détail à régler : à présent j'arrive à avoir une scrollbar pour chaque Tab mais le problème c'est qu'à l'apparition de la fenêtre, la scrollbar se trouve au milieu et non au bord gauche de la fenêtre.
    Je ne sais pas si c'est très claire mais voici le code actuel :

    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
     
    from tkinter import *
    from tkinter import ttk
     
     
    n1,n2 = int(input('Nb tab :')),int(input('Nb label :'))
     
    fen = Tk()
     
    nb = ttk.Notebook(fen)
     
    for j in range(n1):
        fr = Frame(nb)
        fr.columnconfigure(0,weight=1)
        nb.add(fr,text='Tab ' +str(j))
     
        scroll = Scrollbar(fr,orient=HORIZONTAL)
        scroll.grid(column=0,row=1,sticky=EW)
     
        can = Canvas(fr,xscrollcommand=scroll.set)
        can.grid(column=0,row=0,sticky=EW)
     
        scroll.config(command=can.xview)
     
     
        fr2 = Frame(can)
        fr2.pack(fill=X)
     
        for k in range(n2):
            Label(fr2,text='Label '+str(k)).grid(column=k,row=0)
     
        can.config(height=300,width=500)
     
        can.create_window(0, 0,window=fr2)
        fr2.update_idletasks()
        can.config(scrollregion=can.bbox("all"))
     
    nb.pack(fill=BOTH)

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

    Un truc comme can.create_window(0, 0, window=fr2) va "centrer" fr2 autour de 0, 0.
    Et donc la scrollbar ne pourra que refléter ", je te montre le centre mais il y en a à gauche et à droite qu'on pourra "voir" en faisant défiler...
    C'est là qu'intervient l'option "anchor": can.create_window(0, 0, window=fr2, anchor='nw') dit de placer le coin en haut à gauche en 0, 0. Dans ce cas, 0, 0 sera le début de.... et la scrollbar sera à gauche.

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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Parfait, ça marche nikel merci beaucoup !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/10/2008, 10h21
  2. [MySQL] Affichage d’une chaîne de caractères contenant des parenthèses
    Par mathiotp dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/11/2007, 20h31
  3. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52
  4. Lier une ScrollBar à une JLabel
    Par hakim11 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 02/01/2006, 01h27
  5. Création d'une base de données contenant des images
    Par gandalf_le_blanc dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 16/06/2004, 15h29

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