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

Python Discussion :

mettre une scrollbar dans une frame


Sujet :

Python

  1. #1
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut mettre une scrollbar dans une frame
    Bonjour, je fais appel a vous car je comprend pas comment on fait pour intégrer une scrollbar dans une frame ou un top level.

    Voici mon 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
    from tkinter import *
     
    fenetre = Tk()
     
    scrollbar = Scrollbar(fenetre)
    scrollbar.pack(side=RIGHT, fill=Y)
     
    myframe=Frame(fenetre)
     
    for i in range(0,200):
    	champ_label = Label(myframe, text="test !")
    	champ_label.pack()
     
    myframe.pack()
    fenetre.mainloop()
    Je veut une scrollbar sur l'axe y pour afficher mes 200 éléments.

    Merci d'avance pour votre aide.

    EDIT: j'utilise python 3.4 sous windows7 Pro 64bits

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Si c'est difficile d'associer les 2 widgets, il existe un tkinter.scrolledtext fait tout le travail.

    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
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import tkinter as tk
    import tkinter.scrolledtext as st
     
    if __name__ == '__main__':
        root = tk.Tk()
        my_st = st.ScrolledText(
            master=root,
            width=30,
            height=10,
        )
        my_st.pack(
            fill=tk.BOTH,
            expand=tk.Y,
        )
        for i in range(200):
            my_st.insert(tk.END, "test {}\n".format(i))
        root.mainloop()

  3. #3
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    J'ai mis des labels pour faire simple, il s'agit de checkbox en faite.

    Je doit aligner 250 checkbox qui sont crée dans une boucle for, mais je veut mettre une scrollbar, car sa rentre pas dans l’écran.

  4. #4
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    personnes pour m'aider ?

  5. #5
    Membre éprouvé
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Par défaut
    Bonjour,

    je connais que très peu les scrollbar, dans la méthode swinnen il en parle dans les derniers chapitre le 12 ou le 13, je pense qu'elle te permettra de résoudre ton soucis, si tu es motivé à parcourir une cinquantaine de page.

    Edit: (si ça a fonctionné) tu as surement reçu un message privé, je t'ai mis un extrait de code avec scrollbar + les commentaires, si tu as rien reçu, ce que tu cherches se trouve page 245 à 250 +

  6. #6
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    je connais que très peu les scrollbar, dans la méthode swinnen
    Tu aurais le lien stp ?

    Puré c'est si dure que ca pour mettre une pu*** de scrollbar !

    J'ai vu qu'avec une canvas c'était plus réalisable, je crois que je vais tenter de transformer ma frame contenant mes checkbox en canvas.

    EDIT, j'ai vu ton mail, la scrollbar est integrer a une listbox, sa c'est "facile", pas a une frame.

  7. #7
    Membre éprouvé
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Par défaut
    http://python.developpez.com/cours/apprendre-python3/

    une fois téléchargé regarde à partir de la page 246
    les exemples swinnen sont fait avec frame

    Edit: Ah mince, désolé, à la limite, une fois téléchargé, regarde la suite des exemples, tu y verras peut être ton trésor !

  8. #8
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    Non, y'a rien, merci quand même pour ton aide.
    sur la doc officiel de python pareil, on trouve rien, ils montrent comment mettre une scrollbar sur du texte et co mais rien sur une frame ou une fenêtre complète.

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 121
    Billets dans le blog
    47
    Par défaut
    Bonjour,

    pour connecter un scrollbar et un canvas, tu as des explications ici.

  10. #10
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    Le problème c'est que j'ai peur qu'une canvas ne se comporte pas comme une frame, le canvas accepte t'il bien les labels, les zone de texte et les checkbox ?

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 681
    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 681
    Par défaut
    Citation Envoyé par sazearte Voir le message
    Le problème c'est que j'ai peur qu'une canvas ne se comporte pas comme une frame, le canvas accepte t'il bien les labels, les zone de texte et les checkbox ?
    Vous placez la frame dans le canvas (via .create_window) et vous scrollez le canvas.

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

  12. #12
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    Pour le canvas, voila ce que j'ai fais, j'ai mis la frame dans le canvas, mais sa ne marche toujours pas.

    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
    from tkinter import *
    root=Tk()
    canvas=Canvas(root,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500))
     
    frame=Frame(canvas,width=300,height=300)
     
    setingsbutton = Button(master=frame, text='Settings')
    setingsbutton.pack(side=TOP)
     
    for i in range(0,100) :
    	c = Checkbutton(frame, text="toto",selectcolor="black")
    	c.pack(side=TOP, anchor=W)
     
    frame.pack()
    vbar=Scrollbar(root,orient=VERTICAL)
    vbar.pack(side=RIGHT,fill=Y)
    vbar.config(command=canvas.yview)
    canvas.config(width=300,height=300)
    canvas.config( yscrollcommand=vbar.set)
    canvas.pack(side=LEFT,expand=True,fill=BOTH)
     
    root.mainloop()

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 681
    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 681
    Par défaut
    Citation Envoyé par sazearte Voir le message
    Pour le canvas, voila ce que j'ai fais, j'ai mis la frame dans le canvas, mais sa ne marche toujours pas.
    Je ne vois pas de .create_window dans votre code.

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

  14. #14
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 121
    Billets dans le blog
    47
    Par défaut
    Apparemment il faut ajouter le frame avec create_windows sinon le canvas s'adapte en hauteur :

    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
    from tkinter import *
     
    root=Tk()
     
    canvas=Canvas(root,bg='#FFFFFF',width=300,height=300)
    canvas.pack(side=LEFT) 
    frame=Frame()
     
    setingsbutton = Button(master=frame, text='Settings')
    setingsbutton.pack(side=TOP)
     
    for i in range(0,100) :
    	c = Checkbutton(frame, text="toto "+str(i), selectcolor="black")
    	c.pack(side=TOP, anchor=W)
     
    # ajouter le frame dans le canvas
    canvas.create_window(0,0, anchor = NW, window = frame)
     
    vbar=Scrollbar(root,orient=VERTICAL)
    vbar.pack(side=RIGHT,fill=Y)
     
    canvas.configure(yscrollcommand=vbar.set)
    canvas.configure(
        yscrollcommand=vbar.set,
        scrollregion=(0, 0, 300, 2530)
    )
     
    vbar.configure(command=canvas.yview)
     
    root.mainloop()

  15. #15
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    Je ne vois pas ou on met le .create_window, dans le canvas ou dans la frame ?

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 681
    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 681
    Par défaut
    Citation Envoyé par sazearte Voir le message
    Je ne vois pas ou on met le .create_window, dans le canvas ou dans la frame ?
    window est un item du canvas.
    .create_window la méthode qui permet d'afficher un widget dans le canvas.
    Vous avez une documentation tkinter en français ici.

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

  17. #17
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    J'avais pas vu le message de f-leb, c'est bon j'ai compris, merci pour votre aide

    Par contre j'ai une erreur dans mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unknown option "-optioncommand"

  18. #18
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    probleme résolus, j'ai changer optioncommand par command, je sais pas pourquoi il en voulait pas, mais sa marche c'est l'essentiel, merci !

  19. #19
    Inactif  

    Homme Profil pro
    NR
    Inscrit en
    Juin 2013
    Messages
    3 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : NR
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3 715
    Billets dans le blog
    9
    Par défaut
    Je viens de m'apercevoir qu'il y'avait un problème:

    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
    from tkinter import *
     
    root=Tk()
     
    canvas=Canvas(root,bg='#FFFFFF',width=300,height=300)
    canvas.pack(side=LEFT)
    frame=Frame()
     
    setingsbutton = Button(master=frame, text='Settings')
    setingsbutton.pack(side=TOP)
     
    for i in range(0,2000) :
        c = Checkbutton(frame, text="toto "+str(i), selectcolor="black")
        c.pack(side=TOP, anchor=W)
     
    # ajouter le frame dans le canvas
    canvas.create_window(0,0, anchor = NW, window = frame)
     
    vbar=Scrollbar(root,orient=VERTICAL)
    vbar.pack(side=RIGHT,fill=Y)
     
    canvas.configure(yscrollcommand=vbar.set)
    canvas.configure(
        yscrollcommand=vbar.set,
        scrollregion=(0, 0, 300, 50000)
    )
     
    vbar.configure(command=canvas.yview)
     
    root.mainloop()
    Pourquoi au delà de 1300 éléments sa ne s'affiche plus ?
    J'aurais un peu près 2000 éléments à lister....

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

    Citation Envoyé par sazearte Voir le message
    Pourquoi au delà de 1300 éléments sa ne s'affiche plus ?
    J'aurais un peu près 2000 éléments à lister....
    Si c'est le cas çà s'appelle un "bug" mais, au delà, quel serait l'intérêt côté utilisateur de trouver et cliquer sur quelques radio buttons parmi les 2000 présentés ainsi?

    - 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.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. mettre un swf dans une iframe dans une page html
    Par petitevero dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/04/2011, 02h58
  2. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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