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 :

ScrolledFrame et méthode grid()


Sujet :

Tkinter Python

  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut ScrolledFrame et méthode grid()
    Bonjour à tous. Je viens de faire la découverte du module Pmw et j'ai commencé à l'implémenter dans un programme pour me familiariser avec. Dans mon programme, j'affiche des images dans plusieurs labels générés automatiquement via une boucle et sont inclus dans une scrolledframe car le nombre de label est variable. En utilisant la méthode .pack() sur ma scrolledframe, j'arrive au résultat que je souhaite mais je me trouve limité dans mes possibilités de placement. Je tente donc la méthode .grid() avec column=0 et row=0 et malheureusement ma scrollbar n'apparait plus dans la scrolledframe. N'ayant trouvé que peu d'information sur Pmw et pas du tout sur ce problème particulier, je m'en retourne à vous.

    J'utilise python 2.7 pour ce programme et voici le "programme" :
    (code qui n'est encore qu'au stade de "test")
    j'ai mis en commentaire le code qui est en cause dans la partie Frame Principale.

    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
    # !/usr/bin/env python
    # -*- coding:utf-8 -*-
     
     
    import Tkinter as Tk
    from PIL import ImageTk, Image
    from dircache import listdir
    import Pmw
     
    class Base(Tk.Tk):
        def __init__(self):
     
            Tk.Tk.__init__(self)                
            Pmw.initialise(self)
     
            ##### MenuBar #####
            menu_fichier = Tk.Menu(self)
            sous_menu_fichier = Tk.Menu(menu_fichier, tearoff=0)
            sous_menu_fichier.add_command(label='Quitter', command=self.quit)
            menu_fichier.add_cascade(label='Fichier', menu=sous_menu_fichier)
            self.configure(menu=menu_fichier)
     
            ##### Frame Principale #####
     
            displayFrame = Pmw.ScrolledFrame(self,
                                             labelpos = 'N',
                                             usehullsize=1,
                                             hscrollmode='none',
                                             hull_width = 1300,
                                             hull_height= 800
                                             )
            displayFrame.pack(side="left")
            #displayFrame.grid(column=0, row=0)
            self.m = displayFrame.interior()
     
     
            ##### Déclaration des variables pour la génération des thumbs #####
            dir = listdir("K:/TEST/Images/")
            col, lign = 0, 0
            x = 0
            c = 0
     
            ##### Génération des thumbs #####
            while x < len(dir):
     
                adrThumb = "K:/TEST/Images/"+dir[x]
                Listvar = ["Label"+str(x),"affiche"+str(x),"photo"+str(x), "frame"+str(x)]
     
                Listvar[3] = Tk.Frame(self.m, pady=5, padx=5)
                Listvar[3].grid(column=col, row=lign)
                Listvar[1] = Image.open(adrThumb)
                Listvar[2] = ImageTk.PhotoImage(Listvar[1])
                Listvar[0] = Tk.Label(Listvar[3], image=Listvar[2])
                Listvar[0].image = Listvar[2]
                Listvar[0].grid(column=0, row=0, columnspan=2)
     
                col += 1
                x += 1
                if col % 5 == 0 and col != 0:
                    lign += 1
                    col = 0
     
    if __name__ == '__main__':
        App = Base()
        App.title("Vidéothèque")
        App.mainloop()
    Je vous remercie d'avance pour vos réponses.

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Elle est pourtant bien là.

    Lors de la création du Widget un Frame conteneur (origInterior) est créer.
    Celui ci contient le _clipper (Frame de 400x300), les Scrollbar (_horizScrollbar et _vertScrollbar) ainsi que _frame (Frame) qui est le conteneur qui vous est retourner par displayFrame.interior(). C'est cette dernière Frame ou _clipper qui sert pour le scrolling.
    C'est l'option usehullsize=1 qui fait que le Widget reste fixe. En fait usehullsize fait un self.origInterior.grid_propagate(0), grid est le gestionnaire utilisé par ScrolledFrame.
    La création des frame/Label ne modifie donc pas la taille de la fenêtre lorsque grid est utilisé.
    pack() lui y est insensible car pour pack() c'est pack_propagate().
    La taille est donc définie ici par hull_width et hull_height puisque l'option usehullsize est à 1 et... la valeur de hull_width est trop grande, cela sort du cadre

    @+

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Petite info supplémentaire: hull c'est origInterior (displayFrame.origInterior.winfo_reqwidth() > 1300)

    @++

  4. #4
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    Je n'y comprends plus rien... je refais le test pour vérifier mon observation et je me retrouve quelque soit le code utilisé avec ce que je cherche...
    Il faut que je précise qu'entre ces deux observations j'ai désinstallé python 3.2, mis ma version de python 2.7 utilisée en x64 pour un autre problème que j'ai eu avec PyQt.

    Apparemment le problème a donc été résolu à mon insu

    Merci pour vos réponses en tout cas, en effet ça fonctionne parfaitement dans les deux cas.

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Et vous utilisez quoi comme hull_width ? Toujours 1300 ?

  6. #6
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    J'ai utilisé respectivement 650 et 300 et en effet si je remets les valeurs anciennement utilisées je n'ai pas la scrollbar même si je réduis manuellement la fenêtre. Contrairement à l'utilisation de la méthode pack() qui m'affiche la scrollbar si je la réduis manuellement. Je ne comprends pas vraiment pourquoi cette différence mais au moins je sais d'où ça vient.

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Merci pour la réponse, j'avais peur d'avoir oublier quelque chose.
    Pour ce qui est de l'explication relisez ce que je vous explique plus haut.

    @++ et bon code.

  8. #8
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    Je vous remercie, je comprends mieux maintenant.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/03/2008, 11h31
  2. Centrer un texte dans un string Grid
    Par christine dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/10/2002, 22h33
  3. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26
  4. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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