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 :

Probleme de Scrollbar


Sujet :

Tkinter Python

  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut Probleme de Scrollbar
    Bonjour à tous !

    Je souhaiterai creer une fenetre, avec un canevas ayant une barre de defilement, le problème est que lorsque je rajoute un frame avec des Entry et des Button, cela me fait un Canvas minuscule et le Scrollbar vertical ne fonctionne pas , 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
    application = Tk()
     
    texte=StringVar()
     
    cadre=Frame(application)
    cadre.configure(bd=2,relief='groove',width=100,height=100)
    cadre.pack(side=TOP,fill=BOTH,expand=True)
     
     
    cv = Canvas(application)
    cv.grid(row=0, column=0)
    cv.pack()
     
     
    vscroll=Scrollbar(cv, orient=VERTICAL)
    vscroll.grid(row=0,column=1,sticky=N+S)
     
    hscroll=Scrollbar(cv,orient=HORIZONTAL)
    hscroll.grid(row=1,column=0,sticky=E+W)
     
    cv.config(yscrollcommand=vscroll.set)
    cv.config(xscrollcommand=vscroll.set)
     
    vscroll.config(command=cv.yview)
    hscroll.config(command=cv.xview)
     
    saisie=Entry(cadre,textvariable=texte)
    saisie.grid(row=1,column=1,padx=5,pady=5)
    saisie.pack()
     
    bouton=Button(cadre,command=Traitement)
    bouton.configure(text='bouton')
    bouton.grid(row=2,column=1,padx=5,pady=5)
    bouton.pack()
     
    application.mainloop()
    Merci d'avance à ceux qui pourront m'aider.

  2. #2
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    Cet exemple illustre un canvas fixe avec une scrollbar :

    http://coverage.livinglogic.de/Demo/...llbars.py.html


  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
    Bonjour,

    Il n'est jamais bon de mélanger les positionnements (pack, grid, place), même si cela semble fonctionner.
    De plus ici tu fais fort : tu grid puis tu pack...

    @+

  4. #4
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    Je suis d'accord avec PauseKawa... Mais j'ajouterais la subtilité suivante : c'est dans un même conteneur (exemple un Frame), que tu dois rester dans le GridManager que tu as choisi (ex: pack). Mais au sein d'une même application, tu peux très bien avoir un conteneur utilisant Grid pour ses widgets internes, placé à côté d'un autre conteneur utilisant Pack pour ses widget internes...

    Comme l'a bien précisé PauseKawa, en effet, ton Entry "saisie" est une fois utilisée avec Grid, et juste après avec Pack...

    Ce n'est pas une bonne chose !

  5. #5
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    D'accord, je ne savais pas qu'il ne fallait pas utiliser grid et pack en meme temps ! je vais modifier cela ! Merci

  6. #6
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Comment puis je faire pour que mon canevas ait une taille raisonnable, car là il est minuscule ?

  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
    Bonsoir,

    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
    from Tkinter import *
     
    def Traitement():
        quit()
     
    application = Tk()
     
    texte=StringVar()
     
    cadre=Frame(application, bd=2, relief='groove', width=100, height=100)
    cadre.pack(side=TOP, fill=BOTH, expand=True)
     
    cv = Canvas(cadre, bg='red').grid(row=0, column=0, columnspan=1)
     
    Entry(cadre, textvariable=texte).grid(row=2, column=0)
     
    Button(cadre, text='bouton', command=Traitement).grid(row=3, column=0)
     
    application.mainloop()
    A toi de voir avec l'exemple plus haut pour les scroll.

    @+

  8. #8
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Mon scroll n'allait pas ?

  9. #9
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    L'exemple que j'ai proposé est vraiment la solution pour ton problème, en plus il utilise la forme objet, ce qui est bien mieux... Comme il est assez chiant à recopier-recoller, je l'ai fait pour toi, voici l'exemple facilement copiable :

    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
     
    from Tkinter import *
     
    # This example program creates a scroling canvas, and demonstrates
    # how to tie scrollbars and canvses together. The mechanism
    # is analogus for listboxes and other widgets with
    # "xscroll" and "yscroll" configuration options.
     
    class Test(Frame):
        def printit(self):
            print "hi"
     
        def createWidgets(self):
            self.question = Label(self, text="Can Find The BLUE Square??????")
            self.question.pack()
     
            self.QUIT = Button(self, text='QUIT', background='red', height=3, command=self.quit)
            self.QUIT.pack(side=BOTTOM, fill=BOTH)
            spacer = Frame(self, height="0.25i")
            spacer.pack(side=BOTTOM)
     
            # notice that the scroll region (20" x 20") is larger than
            # displayed size of the widget (5" x 5")
            self.draw = Canvas(self, width="5i", height="5i", background="white", scrollregion=(0, 0, "20i", "20i"))
            self.draw.scrollX = Scrollbar(self, orient=HORIZONTAL)
            self.draw.scrollY = Scrollbar(self, orient=VERTICAL)
     
            # now tie the three together. This is standard boilerplate text
            self.draw['xscrollcommand'] = self.draw.scrollX.set
            self.draw['yscrollcommand'] = self.draw.scrollY.set
            self.draw.scrollX['command'] = self.draw.xview
            self.draw.scrollY['command'] = self.draw.yview
     
            # draw something. Note that the first square
            # is visible, but you need to scroll to see the second one.
            self.draw.create_rectangle(0, 0, "3.5i", "3.5i", fill="black")
            self.draw.create_rectangle("10i", "10i", "13.5i", "13.5i", fill="blue")
     
            # pack 'em up
            self.draw.scrollX.pack(side=BOTTOM, fill=X)
            self.draw.scrollY.pack(side=RIGHT, fill=Y)
            self.draw.pack(side=LEFT)
     
        def scrollCanvasX(self, *args):
            print "scrolling", args
            print self.draw.scrollX.get()
     
        def __init__(self, master=None):
            Frame.__init__(self, master)
            Pack.config(self)
            self.createWidgets()
     
    test = Test()
     
    test.mainloop()

  10. #10
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Merci ! mais en faisant cela, je suis obligée de continuer avec des self pour toute mon interface ?

  11. #11
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    Si Traitement est une fonction dans ta classe, tape ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.domaine =  Button(self, text='Domaine', background='blue', height=1,command=self.Traitement)

  12. #12
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    Ecrit ceci dans l'entête de définition de ta fonction :


  13. #13
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    message d'erreur :
    global name 'texte' is not defined

    car j'ai defini self.texte=StingVar() dans ma fonction def createWidgets(self)
    et non dans ma fonction Traitement ...
    Où dois je le definir ?

  14. #14
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    Tu oublies beaucoup de self me semble-t-il !!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def Traitement(self):
            lien=self.texte.get()

  15. #15
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    Tu manques, je crois, d'une bonne explication théorique sur la conception objet.

    En gros, la classe est ton modèle, et tu instancies des objets à partir de ta classe.

    Self est un terme générique qui représente une instance donnée.

    http://python.developpez.com/cours/T...age=Chapitre12

  16. #16
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    Plus condensé et plus efficace selon moi, si tu comprends l'anglais :

    http://en.wikibooks.org/wiki/Python_...ed_programming

  17. #17
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Merci

Discussions similaires

  1. probleme de scrollbar
    Par benyamin dans le forum 2D
    Réponses: 1
    Dernier message: 21/05/2008, 10h40
  2. probleme de scrollbar
    Par clod83 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/11/2007, 11h15
  3. [FLASH 8] Probleme de scrollbar
    Par eloizee dans le forum Flash
    Réponses: 4
    Dernier message: 24/03/2007, 20h09
  4. Problème affichage scrollbar
    Par nadalator dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 12/05/2006, 18h14
  5. [FLASH MX] Probleme de scrollbar et texte dynamique
    Par Bisûnûrs dans le forum Flash
    Réponses: 6
    Dernier message: 28/06/2004, 21h12

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