[Tkinter] comment ajouter une scrollbar à un ensemble de ligne Label + Entry
3 réponses
cyril.legret
Bonjour à tous,
Je veux créer un formulaire d'une centaine de lignes.
Sur chaque ligne, il y a un Label() et une Entry()
Lorsque je le fais, la fenêtre devient géante en sur la hauteur.
Comment faire pour limiter la hauteur à la taille de l'écran et
surtout ajouter une scrollbar pour faire défiler le formulaire.
Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou
Text() et pas à Tk() ou Frame()
Merci pour votre aide ...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Eric Brunel
Cyril Legret wrote:
Bonjour à tous, Je veux créer un formulaire d'une centaine de lignes. Sur chaque ligne, il y a un Label() et une Entry() Lorsque je le fais, la fenêtre devient géante en sur la hauteur. Comment faire pour limiter la hauteur à la taille de l'écran et surtout ajouter une scrollbar pour faire défiler le formulaire. Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou Text() et pas à Tk() ou Frame() Merci pour votre aide ...
Pmw est ton ami: http://pmw.sourceforge.net/ Pmw.ScrolledFrame fait exactement ce que tu veux.
Si tu ne peux pas ou ne veux pas utiliser Pmw, la façon de faire est de créer ton frame comme une window dans un Canvas, de configurer la scrollregion du Canvas en fonction des dimensions de ton frame et d'attacher les scrollbars au Canvas:
---------------------------------------------------- from Tkinter import *
## La fenetre, avec les options de grille qui vont bien root = Tk() root.grid_rowconfigure(0, weight=1) root.grid_columnconfigure(0, weight=1)
## Le canvas cnv = Canvas(root) cnv.grid(row=0, column=0, sticky='nswe')
## Le Frame, dans le Canvas, mais sans pack ou grid frm = Frame(cnv) ## Les labels et entrys dans le frame for i in range(50): Label(frm, text='Label%s: ' % i).grid(row=i, column=0) Entry(frm).grid(row=i, column=1) ## Pour etre sur que les dimensions sont calculées frm.update()
## Création de la window dans le Canvas cnv.create_window(0, 0, window=frm, anchor=NW)
## La scrollregion est la boite englobante pour tout ce qu'il y a dans le Canvas cnv.configure(scrollregion=cnv.bbox(ALL))
## C'est parti! root.mainloop() ----------------------------------------------------
HTH -- - Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> - PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
Cyril Legret wrote:
Bonjour à tous,
Je veux créer un formulaire d'une centaine de lignes.
Sur chaque ligne, il y a un Label() et une Entry()
Lorsque je le fais, la fenêtre devient géante en sur la hauteur.
Comment faire pour limiter la hauteur à la taille de l'écran et
surtout ajouter une scrollbar pour faire défiler le formulaire.
Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou
Text() et pas à Tk() ou Frame()
Merci pour votre aide ...
Pmw est ton ami: http://pmw.sourceforge.net/
Pmw.ScrolledFrame fait exactement ce que tu veux.
Si tu ne peux pas ou ne veux pas utiliser Pmw, la façon de faire est de créer
ton frame comme une window dans un Canvas, de configurer la scrollregion du
Canvas en fonction des dimensions de ton frame et d'attacher les scrollbars au
Canvas:
----------------------------------------------------
from Tkinter import *
## La fenetre, avec les options de grille qui vont bien
root = Tk()
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
## Le canvas
cnv = Canvas(root)
cnv.grid(row=0, column=0, sticky='nswe')
## Le Frame, dans le Canvas, mais sans pack ou grid
frm = Frame(cnv)
## Les labels et entrys dans le frame
for i in range(50):
Label(frm, text='Label%s: ' % i).grid(row=i, column=0)
Entry(frm).grid(row=i, column=1)
## Pour etre sur que les dimensions sont calculées
frm.update()
## Création de la window dans le Canvas
cnv.create_window(0, 0, window=frm, anchor=NW)
## La scrollregion est la boite englobante pour tout ce qu'il y a dans le Canvas
cnv.configure(scrollregion=cnv.bbox(ALL))
## C'est parti!
root.mainloop()
----------------------------------------------------
HTH
--
- Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
Bonjour à tous, Je veux créer un formulaire d'une centaine de lignes. Sur chaque ligne, il y a un Label() et une Entry() Lorsque je le fais, la fenêtre devient géante en sur la hauteur. Comment faire pour limiter la hauteur à la taille de l'écran et surtout ajouter une scrollbar pour faire défiler le formulaire. Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou Text() et pas à Tk() ou Frame() Merci pour votre aide ...
Pmw est ton ami: http://pmw.sourceforge.net/ Pmw.ScrolledFrame fait exactement ce que tu veux.
Si tu ne peux pas ou ne veux pas utiliser Pmw, la façon de faire est de créer ton frame comme une window dans un Canvas, de configurer la scrollregion du Canvas en fonction des dimensions de ton frame et d'attacher les scrollbars au Canvas:
---------------------------------------------------- from Tkinter import *
## La fenetre, avec les options de grille qui vont bien root = Tk() root.grid_rowconfigure(0, weight=1) root.grid_columnconfigure(0, weight=1)
## Le canvas cnv = Canvas(root) cnv.grid(row=0, column=0, sticky='nswe')
## Le Frame, dans le Canvas, mais sans pack ou grid frm = Frame(cnv) ## Les labels et entrys dans le frame for i in range(50): Label(frm, text='Label%s: ' % i).grid(row=i, column=0) Entry(frm).grid(row=i, column=1) ## Pour etre sur que les dimensions sont calculées frm.update()
## Création de la window dans le Canvas cnv.create_window(0, 0, window=frm, anchor=NW)
## La scrollregion est la boite englobante pour tout ce qu'il y a dans le Canvas cnv.configure(scrollregion=cnv.bbox(ALL))
## C'est parti! root.mainloop() ----------------------------------------------------
HTH -- - Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> - PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
Olivier Ravard
"Eric Brunel" a écrit dans le message de news: 41e3ab4d$0$19396$
Cyril Legret wrote:
Bonjour à tous, Je veux créer un formulaire d'une centaine de lignes. Sur chaque ligne, il y a un Label() et une Entry() Lorsque je le fais, la fenêtre devient géante en sur la hauteur. Comment faire pour limiter la hauteur à la taille de l'écran et surtout ajouter une scrollbar pour faire défiler le formulaire. Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou Text() et pas à Tk() ou Frame() Merci pour votre aide ...
Pmw est ton ami: http://pmw.sourceforge.net/ Pmw.ScrolledFrame fait exactement ce que tu veux.
Il y a la même chose avec BWidget
Si tu ne peux pas ou ne veux pas utiliser Pmw, la façon de faire est de créer
ton frame comme une window dans un Canvas, de configurer la scrollregion du
Canvas en fonction des dimensions de ton frame et d'attacher les scrollbars au
Canvas:
---------------------------------------------------- from Tkinter import *
## La fenetre, avec les options de grille qui vont bien root = Tk() root.grid_rowconfigure(0, weight=1) root.grid_columnconfigure(0, weight=1)
## Le canvas cnv = Canvas(root) cnv.grid(row=0, column=0, sticky='nswe')
## Le Frame, dans le Canvas, mais sans pack ou grid frm = Frame(cnv) ## Les labels et entrys dans le frame for i in range(50): Label(frm, text='Label%s: ' % i).grid(row=i, column=0) Entry(frm).grid(row=i, column=1) ## Pour etre sur que les dimensions sont calculées frm.update()
## Création de la window dans le Canvas cnv.create_window(0, 0, window=frm, anchor=NW)
## La scrollregion est la boite englobante pour tout ce qu'il y a dans le Canvas
cnv.configure(scrollregion=cnv.bbox(ALL))
## C'est parti! root.mainloop() ----------------------------------------------------
HTH -- - Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> - PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
"Eric Brunel" <eric_brunel@despammed.com> a écrit dans le message de news:
41e3ab4d$0$19396$8fcfb975@news.wanadoo.fr...
Cyril Legret wrote:
Bonjour à tous,
Je veux créer un formulaire d'une centaine de lignes.
Sur chaque ligne, il y a un Label() et une Entry()
Lorsque je le fais, la fenêtre devient géante en sur la hauteur.
Comment faire pour limiter la hauteur à la taille de l'écran et
surtout ajouter une scrollbar pour faire défiler le formulaire.
Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou
Text() et pas à Tk() ou Frame()
Merci pour votre aide ...
Pmw est ton ami: http://pmw.sourceforge.net/
Pmw.ScrolledFrame fait exactement ce que tu veux.
Il y a la même chose avec BWidget
Si tu ne peux pas ou ne veux pas utiliser Pmw, la façon de faire est de
créer
ton frame comme une window dans un Canvas, de configurer la scrollregion
du
Canvas en fonction des dimensions de ton frame et d'attacher les
scrollbars au
Canvas:
----------------------------------------------------
from Tkinter import *
## La fenetre, avec les options de grille qui vont bien
root = Tk()
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
## Le canvas
cnv = Canvas(root)
cnv.grid(row=0, column=0, sticky='nswe')
## Le Frame, dans le Canvas, mais sans pack ou grid
frm = Frame(cnv)
## Les labels et entrys dans le frame
for i in range(50):
Label(frm, text='Label%s: ' % i).grid(row=i, column=0)
Entry(frm).grid(row=i, column=1)
## Pour etre sur que les dimensions sont calculées
frm.update()
## Création de la window dans le Canvas
cnv.create_window(0, 0, window=frm, anchor=NW)
## La scrollregion est la boite englobante pour tout ce qu'il y a dans le
Canvas
cnv.configure(scrollregion=cnv.bbox(ALL))
## C'est parti!
root.mainloop()
----------------------------------------------------
HTH
--
- Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> -
PragmaDev : Real Time Software Development Tools -
http://www.pragmadev.com
"Eric Brunel" a écrit dans le message de news: 41e3ab4d$0$19396$
Cyril Legret wrote:
Bonjour à tous, Je veux créer un formulaire d'une centaine de lignes. Sur chaque ligne, il y a un Label() et une Entry() Lorsque je le fais, la fenêtre devient géante en sur la hauteur. Comment faire pour limiter la hauteur à la taille de l'écran et surtout ajouter une scrollbar pour faire défiler le formulaire. Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou Text() et pas à Tk() ou Frame() Merci pour votre aide ...
Pmw est ton ami: http://pmw.sourceforge.net/ Pmw.ScrolledFrame fait exactement ce que tu veux.
Il y a la même chose avec BWidget
Si tu ne peux pas ou ne veux pas utiliser Pmw, la façon de faire est de créer
ton frame comme une window dans un Canvas, de configurer la scrollregion du
Canvas en fonction des dimensions de ton frame et d'attacher les scrollbars au
Canvas:
---------------------------------------------------- from Tkinter import *
## La fenetre, avec les options de grille qui vont bien root = Tk() root.grid_rowconfigure(0, weight=1) root.grid_columnconfigure(0, weight=1)
## Le canvas cnv = Canvas(root) cnv.grid(row=0, column=0, sticky='nswe')
## Le Frame, dans le Canvas, mais sans pack ou grid frm = Frame(cnv) ## Les labels et entrys dans le frame for i in range(50): Label(frm, text='Label%s: ' % i).grid(row=i, column=0) Entry(frm).grid(row=i, column=1) ## Pour etre sur que les dimensions sont calculées frm.update()
## Création de la window dans le Canvas cnv.create_window(0, 0, window=frm, anchor=NW)
## La scrollregion est la boite englobante pour tout ce qu'il y a dans le Canvas
cnv.configure(scrollregion=cnv.bbox(ALL))
## C'est parti! root.mainloop() ----------------------------------------------------
HTH -- - Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> - PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
David Douard
Eric Brunel wrote:
Cyril Legret wrote:
Bonjour à tous, Je veux créer un formulaire d'une centaine de lignes. Sur chaque ligne, il y a un Label() et une Entry() Lorsque je le fais, la fenêtre devient géante en sur la hauteur. Comment faire pour limiter la hauteur à la taille de l'écran et surtout ajouter une scrollbar pour faire défiler le formulaire. Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou Text() et pas à Tk() ou Frame() Merci pour votre aide ...
Pmw est ton ami: http://pmw.sourceforge.net/ Pmw.ScrolledFrame fait exactement ce que tu veux.
Un exemple rapide, en supposant que les intitulés des labels et les stringvars pour chaque Entry sont dans une liste de dictionnaires (avec 2 étiquettes, 'label' et 'entryvar'), :
import Pmw def create_form(master, form_dict): scroll_frame = Pmw.ScrolledFrame(master) widgets = [] for e in form_dict: f = Pmw.EntryField(scroll_frame.interior(), labelpos='w', label_text=e['label'], entry_textvariable=e['entryvar']) f.pack(side='w', fill='x', expand=1) widgets.append(f) Pmw.alignlabels(widgets) scroll_frame.pack(exapnd=1, fill='both')
Voilà, David
Eric Brunel wrote:
Cyril Legret wrote:
Bonjour à tous,
Je veux créer un formulaire d'une centaine de lignes.
Sur chaque ligne, il y a un Label() et une Entry()
Lorsque je le fais, la fenêtre devient géante en sur la hauteur.
Comment faire pour limiter la hauteur à la taille de l'écran et
surtout ajouter une scrollbar pour faire défiler le formulaire.
Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou
Text() et pas à Tk() ou Frame()
Merci pour votre aide ...
Pmw est ton ami: http://pmw.sourceforge.net/
Pmw.ScrolledFrame fait exactement ce que tu veux.
Un exemple rapide, en supposant que les intitulés des labels et les
stringvars pour chaque Entry sont dans une liste de dictionnaires (avec 2
étiquettes, 'label' et 'entryvar'), :
import Pmw
def create_form(master, form_dict):
scroll_frame = Pmw.ScrolledFrame(master)
widgets = []
for e in form_dict:
f = Pmw.EntryField(scroll_frame.interior(), labelpos='w',
label_text=e['label'], entry_textvariable=e['entryvar'])
f.pack(side='w', fill='x', expand=1)
widgets.append(f)
Pmw.alignlabels(widgets)
scroll_frame.pack(exapnd=1, fill='both')
Bonjour à tous, Je veux créer un formulaire d'une centaine de lignes. Sur chaque ligne, il y a un Label() et une Entry() Lorsque je le fais, la fenêtre devient géante en sur la hauteur. Comment faire pour limiter la hauteur à la taille de l'écran et surtout ajouter une scrollbar pour faire défiler le formulaire. Scrollbar() ne semble s'appliquer qu'à des Listbox(), Canvas() ou Text() et pas à Tk() ou Frame() Merci pour votre aide ...
Pmw est ton ami: http://pmw.sourceforge.net/ Pmw.ScrolledFrame fait exactement ce que tu veux.
Un exemple rapide, en supposant que les intitulés des labels et les stringvars pour chaque Entry sont dans une liste de dictionnaires (avec 2 étiquettes, 'label' et 'entryvar'), :
import Pmw def create_form(master, form_dict): scroll_frame = Pmw.ScrolledFrame(master) widgets = [] for e in form_dict: f = Pmw.EntryField(scroll_frame.interior(), labelpos='w', label_text=e['label'], entry_textvariable=e['entryvar']) f.pack(side='w', fill='x', expand=1) widgets.append(f) Pmw.alignlabels(widgets) scroll_frame.pack(exapnd=1, fill='both')