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 :

Afficher Scrollbar pour un tableau


Sujet :

Tkinter Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Afficher Scrollbar pour un tableau
    Bonjour,

    j'ai un texte qui utilise une scrollbar. Au dessus j'ai un bouton qui, lorsqu'on clique dessus efface le texte et affiche un tableau. J'aimerai qu'il fasse également apparaitre la scrollbar pour faire défiler le tableau. Pourriez-vous m'aider à résoudre mon problème svp?
    Merci d'avance.


    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    from tkinter import *
    from tkinter import ttk
     
    L = 600
    H = 500
     
    nbreElement = 41
     
    class AutoScrollbar(Scrollbar):
        # a scrollbar that hides itself if it's not needed.  only
        # works if you use the grid geometry manager.
        def set(self, lo, hi):
            if float(lo) <= 0.0 and float(hi) >= 1.0:
                self.grid_remove()
            else:
                self.grid()
            Scrollbar.set(self, lo, hi)
        def pack(self, **kw):
            raise TclError ("cannot use pack with this widget")
        def place(self, **kw):
            raise TclError ("cannot use place with this widget") 
     
    def Statistique():
     
        #frame1 = Frame(root, bd=2, borderwidth=3, relief=SUNKEN)
        yscrollbar = AutoScrollbar(frame1, orient=VERTICAL)
        yscrollbar.grid(row=0, column=2, sticky=N+S)
        text = Text(frame1, yscrollcommand=yscrollbar.set, font=48)
        text.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        yscrollbar.config(command=text.yview)
        frame1.grid_columnconfigure(0, weight=3) # expansion de la colonne
        frame1.grid_rowconfigure(0, weight=3) # expansion de la colonne  
     
        t = "X"    
        monText=frame1
        color2 = "green"
     
        fonts = {
            'normal': 'arial 9',
            'bold': 'arial 9 bold',
            }
     
        #monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        for i in range(nbreElement):
            monText.columnconfigure(i, weight=0)
            #monText.rowconfigure(i, weight=1)
            color = ['grey75', 'white'][i % 2]
            for j in range(3):
                label1 = Label(monText, text="Nombre de lignes contenant : "+t+ " fois l'élément" + " : ", bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #,                             
                label1.grid(row=i, column=0)#, padx=1)    
     
                label2 = Label(monText, text=t, bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #, 
                label2.grid(row=i, column=1)#, padx=1)
     
        #monText.columnconfigure(0, weight=0)
        #monText.columnconfigure(1, weight=1)
     
     
    def create_frame(master, t):
     
        frame = Frame(master, bd=2, borderwidth=3, relief=SUNKEN)
        yscrollbar = AutoScrollbar(frame, orient=VERTICAL)
        yscrollbar.grid(row=0, column=1, sticky=N+S)
        text = Text(frame, yscrollcommand=yscrollbar.set, font=48)
        text.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        yscrollbar.config(command=text.yview)
        frame.grid_columnconfigure(0, weight=3) # expansion de la colonne
        frame.grid_rowconfigure(0, weight=3) # expansion de la colonne    
     
        t = "Hacque adfabilitate confisus cum eadem postridie feceris, ut incHacque adfabiliHacque adfabilitate confisus cum eadem postridie feceris, ut incHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et petate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendo."
     
        text.insert(0.0, t)
     
        newBtn = Button(toolbar, text="Tableau", bg="maroon", fg="white", borderwidth=3, command=Statistique)
        newBtn.pack(side=LEFT, fill=X)
     
        #root.geometry('{}x{}'.format(L, H))
        root.minsize(L, H)
     
        return frame
     
    if __name__ == '__main__':
        root = Tk()
     
        myColor="lightblue"
     
        # Defines and places the notebook widget
     
        nb = ttk.Notebook(root)
        toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
     
        frame1 = create_frame(nb,1)
        nb.add(frame1, text='Text')
     
        toolbar.pack(side=TOP, fill=X)
        nb.pack(fill=BOTH, expand=1)
     
     
        # Fin du menu deroulant #############################################  
     
        root.configure(background="green")
        root.mainloop()

  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 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par Arsene12 Voir le message
    J'aimerai qu'il fasse également apparaitre la scrollbar pour faire défiler le tableau. Pourriez-vous m'aider à résoudre mon problème svp?
    La Scrollbar est associée au widget Text.
    Le soucis est que vous placer des widgets par dessus et non dedans (ce sont ses dimensions qui contrôlent la Scrollbar et poser des trucs au dessus ne les change pas).
    Pour réaliser ce que (j'imagine) vous voulez faire, il faut placer vos widgets dans une Frame, placer la Frame dans un Canvas (via .create_windows) associer la Scrollbar au Canvas... Beaucoup de boulot mais en cherchant un peu sur Internet vous trouveriez ceci .

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

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,
    La Scrollbar est associée au widget Text.
    Le soucis est que vous placer des widgets par dessus et non dedans (ce sont ses dimensions qui contrôlent la Scrollbar et poser des trucs au dessus ne les change pas).
    Pour réaliser ce que (j'imagine) vous voulez faire, il faut placer vos widgets dans une Frame, placer la Frame dans un Canvas (via .create_windows) associer la Scrollbar au Canvas... Beaucoup de boulot mais en cherchant un peu sur Internet vous trouveriez ceci .
    - W
    Merci beaucoup. L'exemple correspond exactement à ce que je cherche. Va falloir maintenant que je l'intègre à mon propre code et ça va être un bon exercice. J'espère que je posterai le résultat rapidement. Mon premier essai est encourageant :


    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    from tkinter import *
    from tkinter import ttk
     
    L = 600
    H = 500
     
    nbreElement = 41
     
    class VerticalScrolledFrame(Frame):
        """A pure Tkinter scrollable frame that actually works!
        * Use the 'interior' attribute to place widgets inside the scrollable frame
        * Construct and pack/place/grid normally
        * This frame only allows vertical scrolling
        """
        def __init__(self, parent, *args, **kw):
            Frame.__init__(self, parent, *args, **kw)            
     
            # create a canvas object and a vertical scrollbar for scrolling it
            vscrollbar = Scrollbar(self, orient=VERTICAL)
            vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
            canvas = Canvas(self, bd=0, highlightthickness=0,
                            yscrollcommand=vscrollbar.set)
            canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
            vscrollbar.config(command=canvas.yview)
     
            # reset the view
            canvas.xview_moveto(0)
            canvas.yview_moveto(0)
     
            # create a frame inside the canvas which will be scrolled with it
            self.interior = interior = Frame(canvas)
            interior_id = canvas.create_window(0, 0, window=interior,
                                               anchor=NW)
     
            # track changes to the canvas and frame width and sync them,
            # also updating the scrollbar
            def _configure_interior(event):
                # update the scrollbars to match the size of the inner frame
                size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
                canvas.config(scrollregion="0 0 %s %s" % size)
                if interior.winfo_reqwidth() != canvas.winfo_width():
                    # update the canvas's width to fit the inner frame
                    canvas.config(width=interior.winfo_reqwidth())
            interior.bind('<Configure>', _configure_interior)
     
            def _configure_canvas(event):
                if interior.winfo_reqwidth() != canvas.winfo_width():
                    # update the inner frame's width to fill the canvas
                    canvas.itemconfigure(interior_id, width=canvas.winfo_width())
            canvas.bind('<Configure>', _configure_canvas)
     
     
    class AutoScrollbar(Scrollbar):
        # a scrollbar that hides itself if it's not needed.  only
        # works if you use the grid geometry manager.
        def set(self, lo, hi):
            if float(lo) <= 0.0 and float(hi) >= 1.0:
                self.grid_remove()
            else:
                self.grid()
            Scrollbar.set(self, lo, hi)
        def pack(self, **kw):
            raise TclError ("cannot use pack with this widget")
        def place(self, **kw):
            raise TclError ("cannot use place with this widget") 
     
     
    def Statistique():
       app = SampleApp()
    def Statistique2():
     
        #frame1 = Frame(root, bd=2, borderwidth=3, relief=SUNKEN)
        yscrollbar = AutoScrollbar(frame1, orient=VERTICAL)
        yscrollbar.grid(row=0, column=2, sticky=N+S)
        text = Text(frame1, yscrollcommand=yscrollbar.set, font=48)
        text.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        yscrollbar.config(command=text.yview)
        frame1.grid_columnconfigure(0, weight=3) # expansion de la colonne
        frame1.grid_rowconfigure(0, weight=3) # expansion de la colonne  
     
        t = "X"    
        monText=frame1
        color2 = "green"
     
        fonts = {
            'normal': 'arial 9',
            'bold': 'arial 9 bold',
            }
     
        #monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        for i in range(nbreElement):
            monText.columnconfigure(i, weight=0)
            #monText.rowconfigure(i, weight=1)
            color = ['grey75', 'white'][i % 2]
            for j in range(3):
                label1 = Label(monText, text="Nombre de lignes contenant : "+t+ " fois l'élément" + " : ", bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #,                             
                label1.grid(row=i, column=0)#, padx=1)    
     
                label2 = Label(monText, text=t, bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #, 
                label2.grid(row=i, column=1)#, padx=1)
     
        #monText.columnconfigure(0, weight=0)
        #monText.columnconfigure(1, weight=1)
     
     
    def create_frame(master, t):
     
        frame = Frame(master, bd=2, borderwidth=3, relief=SUNKEN)
        yscrollbar = AutoScrollbar(frame, orient=VERTICAL)
        yscrollbar.grid(row=0, column=1, sticky=N+S)
        text = Text(frame, yscrollcommand=yscrollbar.set, font=48)
        text.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        yscrollbar.config(command=text.yview)
        frame.grid_columnconfigure(0, weight=3) # expansion de la colonne
        frame.grid_rowconfigure(0, weight=3) # expansion de la colonne    
     
        t = "Hacque adfabilitate confisus cum eadem postridie feceris, ut incHacque adfabiliHacque adfabilitate confisus cum eadem postridie feceris, ut incHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et petate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendo."
     
        text.insert(0.0, t)
     
        newBtn = Button(toolbar, text="Tableau", bg="maroon", fg="white", borderwidth=3, command=Statistique)
        newBtn.pack(side=LEFT, fill=X)
     
        #root.geometry('{}x{}'.format(L, H))
        root.minsize(L, H)
     
        return frame
     
    if __name__ == '__main__':
     
        class SampleApp(Tk):
            def __init__(self, *args, **kwargs):
                #root = Tk.__init__(self, *args, **kwargs)
                nb.pack_forget()
                self.frame = VerticalScrolledFrame(root)
                self.frame.pack()
                buttons = []
                for i in range(50):
                    buttons.append(Button(self.frame.interior, text="Button " + str(i)))
                    buttons[-1].pack()
     
        root = Tk()
     
        myColor="lightblue"
     
        # Defines and places the notebook widget
     
        nb = ttk.Notebook(root)
        toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
     
        frame1 = create_frame(nb,1)
        nb.add(frame1, text='Text')
     
        toolbar.pack(side=TOP, fill=X)
        nb.pack(fill=BOTH, expand=1)
     
     
        # Fin du menu deroulant #############################################  
     
        root.configure(background="green")
        root.mainloop()

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Mon premier essai est encourageant :
    Voici le deuxième. Pourriez-vous me dire svp comment faire pour aligner 2 labels l'un à côté de l'autre, puis faire pareil pour les lignes du dessous ?

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    from tkinter import *
    from tkinter import ttk
     
    fonts = {
            'normal': 'arial 12',
            'bold': 'arial 9 bold',
    }
     
    L = 600
    H = 600
    #nbreElement = 3
     
    monPad= 100
     
    taille = 50#int(L/nbreElement)
    #print(taille) 
     
    class VerticalScrolledFrame(Frame):
        """A pure Tkinter scrollable frame that actually works!
        * Use the 'interior' attribute to place widgets inside the scrollable frame
        * Construct and pack/place/grid normally
        * This frame only allows vertical scrolling
        """
        def __init__(self, parent, *args, **kw):
            Frame.__init__(self, parent, *args, **kw)            
     
            # create a canvas object and a vertical scrollbar for scrolling it
            vscrollbar = Scrollbar(self, orient=VERTICAL)
            vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
            canvas = Canvas(self, bd=0, highlightthickness=0,
                            yscrollcommand=vscrollbar.set)
            canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
            vscrollbar.config(command=canvas.yview)
     
            # reset the view
            canvas.xview_moveto(0)
            canvas.yview_moveto(0)
     
            # create a frame inside the canvas which will be scrolled with it
            self.interior = interior = Frame(canvas)
            interior_id = canvas.create_window(0, 0, window=interior,
                                               anchor=NW)
     
            # track changes to the canvas and frame width and sync them,
            # also updating the scrollbar
            def _configure_interior(event):
                # update the scrollbars to match the size of the inner frame
                size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
                canvas.config(scrollregion="0 0 %s %s" % size)
                if interior.winfo_reqwidth() != canvas.winfo_width():
                    # update the canvas's width to fit the inner frame
                    canvas.config(width=interior.winfo_reqwidth())
            interior.bind('<Configure>', _configure_interior)
     
            def _configure_canvas(event):
                if interior.winfo_reqwidth() != canvas.winfo_width():
                    # update the inner frame's width to fill the canvas
                    canvas.itemconfigure(interior_id, width=canvas.winfo_width())
            canvas.bind('<Configure>', _configure_canvas)
     
     
    def createTab():
        app = SampleApp() 
    def createTab2(): 
        print("OK")
        t = 'mon Tableau'
        #Statistique(t, monText)
        monText = frame1
        monText.configure(background='white', padx=monPad, pady=monPad)
        with open("comptageMotsParPhrases.txt", "r", encoding="utf-8-sig") as f:
            i = 0
     
            for line in f.readlines():
                j = 0
                color = ['yellow', 'orange'][i % 2] 
                # Traiter la ligne et ainsi de suite ...
                element = line.split(",")
                cle = element[0]
                data1 = element[1]
                #data1 = element[2] 
                dataX = element[1].split("\n")            
                #dataX = element[2].split("\n")
                data2 = dataX[0]        
                #data = data1#,data2
                print(cle, data1)#, data2)
                #print(line.strip())
     
                color2="green"
     
     
                label1 = Label(monText, text="Nombre de lignes contenant : "+cle+ " fois l'élément" + " : ", bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #,                             
                label1.grid(row=i, column=0)#, padx=1)    
     
                label2 = Label(monText, text=data2, borderwidth=5, relief="sunken", fg="black", bg=color2, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #, 
                label2.grid(row=i, column=1)#, columnspan=29, padx=1)
     
                label3 = Label(monText, text=data2, bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #, 
                label3.grid(row=i, column=2)#, padx=1)
     
                monText.grid(row=i, column=0) # expansion du widget Text
                ''
                monText.columnconfigure(0, weight=4)
                monText.columnconfigure(1, weight=0)
                monText.columnconfigure(2, weight=4)
                ''
     
                #monText.grid(row = 0, sticky = E)
                #monText.grid_columnconfigure((0,1,2), weight=2)#, minsize=30)
     
                #monText.grid(row=i, column=0, sticky='nwse')
                #monText.grid(row=i, column=0, sticky='n')
                #monText.grid(row=i, column=2) # expansion du widget Text
     
                i = i+1
     
     
    def create_frame(master, t):
     
        frame = Frame(master, bd=2, bg="beige")#, relief=SUNKEN)
     
        t = "mon lab"
        '''
        frame.grid_columnconfigure(1, weight=3) # expansion de la colonne
        frame.grid_rowconfigure(1, weight=1) # expansion de la colonne
        '''
     
        monText = Text(frame)
        #monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
     
     
        #monText.columnconfigure(0, weight=1)
        #monText.columnconfigure(1, weight=1)
     
     
        newBtn = Button(toolbar, text="Tableau", bg="maroon", fg="white", borderwidth=3, command=createTab)
        newBtn.pack(side=LEFT, fill=X)
     
        #root.geometry('{}x{}'.format(L, H))
        root.minsize(L, H)
     
        return frame   
     
    #createTab()
     
    if __name__ == '__main__':
     
        class SampleApp(Tk):
            def __init__(self, *args, **kwargs):
                #root = Tk.__init__(self, *args, **kwargs)
                nb.pack_forget()
                nbreElement=30
                self.frame = VerticalScrolledFrame(root)
                self.frame.pack()
                print("OK")
                t = 'mon Tableau'
                #Statistique(t, monText)
                monText = self.frame
                monText.configure(background='white', padx=monPad, pady=monPad)
                color="yellow"
                color2="orange"
                for i in range(nbreElement):
                    label1 = Label(self.frame.interior, text="Nombre de lignes contenant : "+t+ " fois l'élément" + " : ", bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #,                             
                    label2 = Label(self.frame.interior, text=t, borderwidth=5, relief="sunken", fg="black", bg=color2, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #, 
                    label1.pack()#side=LEFT)
                    label2.pack()#side=LEFT)
     
        root = Tk()
     
        myColor="lightblue"
     
        # Defines and places the notebook widget
     
        nb = ttk.Notebook(root)
        toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
     
        frame1 = create_frame(nb,1)
        nb.add(frame1, text='Text')
     
        toolbar.pack(side=TOP, fill=X)
        nb.pack(fill=BOTH, expand=1) 
     
        # Fin du menu deroulant #############################################  
     
        root.configure(background="green")
        root.mainloop()

  5. #5
    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 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par Arsene12 Voir le message
    Voici le deuxième. Pourriez-vous me dire svp comment faire pour aligner 2 labels l'un à côté de l'autre, puis faire pareil pour les lignes du dessous ?
    "grid" fait déjà cela tout seul:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import tkinter as tk
     
    for z in range(5):
        for x in range(3):
            label = tk.Label(text='%dx%d' % (x, z))
            label.grid(row=z, column=x)
    tk.mainloop()
    Et si au lieu de vous acharner à faire fonctionner votre code, vous essayiez de vous concentrer sur le fonctionnement de "grid" et sur comment lui faire afficher ce que vous voulez, vous trouveriez la solution tout seul (ou seriez capable de poster un code plus simple permettant de reproduire le problème sans nous infliger la lecture de tout votre code).
    De plus, la question initiale a été résolue: fermez cette discussion et ouvrez en une autre.

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

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Et si vous essayiez de vous concentrer sur le fonctionnement de "grid"...
    - W
    En utilisant grid j'obtenais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error: cannot use geometry manager grid inside .!verticalscrolledframe which already has slaves managed by pack

    En tâtonnant je suis arrivé au bon résultat :

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    from tkinter import *
    from tkinter import ttk
     
    fonts = {
            'normal': 'arial 12',
            'bold': 'arial 9 bold',
    }
     
    L = 600
    H = 600
    #nbreElement = 3
     
    monPad= 100
     
    taille = 50#int(L/nbreElement)
    #print(taille) 
     
    class VerticalScrolledFrame(Frame):
        """A pure Tkinter scrollable frame that actually works!
        * Use the 'interior' attribute to place widgets inside the scrollable frame
        * Construct and pack/place/grid normally
        * This frame only allows vertical scrolling
        """
        def __init__(self, parent, *args, **kw):
            Frame.__init__(self, parent, *args, **kw)            
     
            # create a canvas object and a vertical scrollbar for scrolling it
            vscrollbar = Scrollbar(self, orient=VERTICAL)
            vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
            canvas = Canvas(self, bd=0, highlightthickness=0,
                            yscrollcommand=vscrollbar.set)
            canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
            vscrollbar.config(command=canvas.yview)
     
            # reset the view
            canvas.xview_moveto(0)
            canvas.yview_moveto(0)
     
            # create a frame inside the canvas which will be scrolled with it
            self.interior = interior = Frame(canvas)
            interior_id = canvas.create_window(0, 0, window=interior,
                                               anchor=NW)
     
            # track changes to the canvas and frame width and sync them,
            # also updating the scrollbar
            def _configure_interior(event):
                # update the scrollbars to match the size of the inner frame
                size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
                canvas.config(scrollregion="0 0 %s %s" % size)
                if interior.winfo_reqwidth() != canvas.winfo_width():
                    # update the canvas's width to fit the inner frame
                    canvas.config(width=interior.winfo_reqwidth())
            interior.bind('<Configure>', _configure_interior)
     
            def _configure_canvas(event):
                if interior.winfo_reqwidth() != canvas.winfo_width():
                    # update the inner frame's width to fill the canvas
                    canvas.itemconfigure(interior_id, width=canvas.winfo_width())
            canvas.bind('<Configure>', _configure_canvas)
     
     
    def createTab():
        app = SampleApp() 
    def createTab2(): 
        print("OK")
        t = 'mon Tableau'
        #Statistique(t, monText)
        monText = frame1
        monText.configure(background='white', padx=monPad, pady=monPad)
        with open("comptageMotsParPhrases.txt", "r", encoding="utf-8-sig") as f:
            i = 0
     
            for line in f.readlines():
                j = 0
                color = ['yellow', 'orange'][i % 2] 
                # Traiter la ligne et ainsi de suite ...
                element = line.split(",")
                cle = element[0]
                data1 = element[1]
                #data1 = element[2] 
                dataX = element[1].split("\n")            
                #dataX = element[2].split("\n")
                data2 = dataX[0]        
                #data = data1#,data2
                print(cle, data1)#, data2)
                #print(line.strip())
     
                color2="green"
     
     
                label1 = Label(monText, text="Nombre de lignes contenant : "+cle+ " fois l'élément" + " : ", bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #,                             
                label1.grid(row=i, column=0)#, padx=1)    
     
                label2 = Label(monText, text=data2, borderwidth=5, relief="sunken", fg="black", bg=color2, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #, 
                label2.grid(row=i, column=1)#, columnspan=29, padx=1)
     
                label3 = Label(monText, text=data2, bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #, 
                label3.grid(row=i, column=2)#, padx=1)
     
                monText.grid(row=i, column=0) # expansion du widget Text
                ''
                monText.columnconfigure(0, weight=4)
                monText.columnconfigure(1, weight=0)
                monText.columnconfigure(2, weight=4)
                ''
     
                #monText.grid(row = 0, sticky = E)
                #monText.grid_columnconfigure((0,1,2), weight=2)#, minsize=30)
     
                #monText.grid(row=i, column=0, sticky='nwse')
                #monText.grid(row=i, column=0, sticky='n')
                #monText.grid(row=i, column=2) # expansion du widget Text
     
                i = i+1
     
     
    def create_frame(master, t):
     
        frame = Frame(master, bd=2, bg="beige")#, relief=SUNKEN)
     
        t = "mon lab"
        '''
        frame.grid_columnconfigure(1, weight=3) # expansion de la colonne
        frame.grid_rowconfigure(1, weight=1) # expansion de la colonne
        '''
     
        monText = Text(frame)
        #monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
     
     
        #monText.columnconfigure(0, weight=1)
        #monText.columnconfigure(1, weight=1)
     
     
        newBtn = Button(toolbar, text="Tableau", bg="maroon", fg="white", borderwidth=3, command=createTab)
        newBtn.pack(side=LEFT, fill=X)
     
        root.geometry('{}x{}'.format(L, H))
        #root.minsize(L, H)
     
        return frame   
     
    #createTab()
     
    if __name__ == '__main__':
     
        class SampleApp(Tk):
            def __init__(self, *args, **kwargs):
                #root = Tk.__init__(self, *args, **kwargs)
                nb.pack_forget()
                nbreElement=30
                self.frame = VerticalScrolledFrame(root)
                self.frame.pack()
                print("OK")
                t = 'mon Tableau'
                #Statistique(t, monText)
                #monText = self.frame
                #monText.configure(background='white', padx=monPad, pady=monPad)
                color="yellow"
                color2="orange"
                for i in range(nbreElement):
                    label1 = Label(self.frame.interior, text="Nombre de lignes contenant : "+t+ " fois l'élément" + " : ", bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #,                             
                    label1.grid(row=i, column=0)
                    label2 = Label(self.frame.interior, text=t, borderwidth=5, relief="sunken", fg="black", bg=color2, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #, 
                    label2.grid(row=i, column=1)
     
        root = Tk() 
        myColor="lightblue"
     
        # Defines and places the notebook widget
     
        nb = ttk.Notebook(root)
        toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
     
        frame1 = create_frame(nb,1)
        nb.add(frame1, text='Text')
     
        toolbar.pack(side=TOP, fill=X)
        nb.pack(fill=BOTH, expand=1) 
     
        # Fin du menu deroulant #############################################  
     
        root.configure(background="green")
        root.mainloop()
    Il me faut maintenant faire en sorte que ça occupe toute la fenêtre. Merci pour vos réponses qui m'ont bien aidé.

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

Discussions similaires

  1. [XL-2010] scrollbar pour tableau
    Par leame dans le forum Excel
    Réponses: 2
    Dernier message: 26/04/2013, 12h16
  2. [WD-2010] case a cocher pour afficher ou non un tableau
    Par jules2m dans le forum Word
    Réponses: 1
    Dernier message: 05/07/2012, 16h06
  3. Réponses: 1
    Dernier message: 11/10/2010, 14h31
  4. Afficher un SCROLLBAR pour une View
    Par A_B dans le forum MFC
    Réponses: 19
    Dernier message: 20/11/2008, 16h04
  5. Scrollbar pour afficher une image
    Par gargantua dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/07/2007, 13h23

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