Python [méthode .pack()] [Résolu/Fermé]

Signaler
-
Messages postés
32840
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
-
Bonjour
Juste une petite question pratique.
J'utilise la méthode .pack() comme ceci :
group_iccap_var.pack(fill = 'both', expand = 1, side = 'right').
Or je voudrais que cette fenêtre soit non seulement à droite mais également en haut.
J'ai essayé " side = 'top right' ", mais il me dit qu'on ne peut lui passer comme argument que 'top, bottom, right ou left'.
On ne peut pas les associer?
Merci

7 réponses

Messages postés
32840
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 430
.pack() ?

Je ne l'utilise pas.

Si je peux te donner un conseil: utilise exclusivement .grid()
Grid possède en plus les attributs sticky (NSEW) assez pratiques.


(Attention: ne jamais mélanger .pack() et .grid())
Utilisateur anonyme
Ah bon
J'avais trouvé des exemples avec Pmw où la méthode .pack() était utilisée.
Donc je vais essayer de résoudre monproblème avec la méthode .grid()
Utilisateur anonyme
Bon alors j'ai essayé de remplacer tous les .pack() par des .grid().
J'ai bien regardé tes codes sources pour ton logiciel webgobbler (notamment le fichier webgobbler_config.py).
J'ai essayé de m'en inspirer pour refaire mon interface graphique.
Le problème est que les différentes pagedu notebook m'enpêche de voir toutes mes informations.
En fait dans la première de mon notebook (notebook.page(0), j'ai 4 groupes (définis avec Pmw.Group). Un en haut à gauche, un en haut à droite, un en bas à gauche et un en bas à droite. Pour ça, j'ai utilisé :
column = 0, row = 1
column = 0, row = 2
column = 1, row = 1
column = 1, row = 2
Mais les groupes de droite viennent se superposer sur ceux de gauche, et les groupes du bas sont coupés car notebook.page(0) n'est pas assez grande.
Y'a quelque chose que j'oublie de faire?
Merci
Messages postés
32840
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 430
Vérifie bien quel parent tu donne à chaque wiget que tu créé.
Parfois, en donnant le mauvais parent, il y a des superpositions.

En principe, tkinter s'arrange pour déterminer automatiquement la bonne taille de fenêtre en fonction de la taille de chaque widget.


Sinon là comme ça, je peux pas te dire ce qui ne va pas.

Si tu pouvais jeter un oeil à mon code :
notebook = Pmw.NoteBook(self.root)
self._widgets['main_notebook'] = notebook
notebook.grid(column=0,row=0,sticky='NSWE')

## Add the "Appearance" page to the notebook ##
for name in ("Data", "Trace", "Exit") :
     page = notebook.add(name)

## Create the group menu ##
## Cell 1 - Input
group_input = Pmw.Group(notebook.page(0), tag_text='Input')
group_input.grid(column = 0, row = 1, columnspan = 2, sticky ='NSEW', padx = defaultPadding, pady = defaultPadding, ipadx = defaultPadding, ipady = defaultPadding)

## Cell 2 - Iccap Param
group_iccap = Pmw.Group(notebook.page(0), tag_text='Iccap Param')
group_iccap.grid(column = 1, row = 1, rowspan = 2, sticky ='NSEW', padx = defaultPadding, pady = defaultPadding, ipadx = defaultPadding, ipady = defaultPadding)


Rien que ça, je ne vois pas mes groupes entièrement.
Je distingue juste 'Ic' du 2ème groupe et rien du premier groupe.
Merci
Messages postés
32840
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 430
C'est parceque tes groupes sont vides.
Chaque conteneur (groupe, frame, page...) s'adapte automatiquement à la taille de ce qu'on lui demande de contenir.

Il suffit donc de les remplir.
Exemple:
import Tkinter
import Pmw

class myApplication: 
    def __init__(self,root):
        self.root = root      
        self._widgets = {}
        self.initialisation()  

    def initialisation(self):     
        notebook = Pmw.NoteBook(self.root)
        self._widgets['main_notebook'] = notebook
        notebook.grid(column=0,row=0,sticky='NSWE')
        for name in ("Data", "Trace", "Exit") :
             page = notebook.add(name)
        
        group_input = Pmw.Group(notebook.page(0), tag_text='Input')
        group_input.grid(column = 0, row = 0,sticky ='NSEW')
        
        group_iccap = Pmw.Group(notebook.page(0), tag_text='Iccap Param')
        group_iccap.grid(column = 1, row = 0,sticky ='NSEW')

        Tkinter.Button(group_input.interior(),text="coucou1*************").grid(column=0,row=0)
        Tkinter.Button(group_iccap.interior(),text="coucou2**************").grid(column=0,row=0)
        
def main():
    root = Tkinter.Tk()
    root.title('My application')
    app = myApplication(root)
    root.mainloop()

if __name__ == "__main__":
    main()




Par contre, je ne comprend pas pourquoi tu fais un rowspan (je l'ai supprimé dans le code ci-dessus).
Messages postés
32840
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 430
(oups, dans mon exemple, remettre les deux Tkinter.Button(...) au même niveau que group_iccap.grid(...)
Messages postés
32840
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 430
Le petit exemple donne ça:
https://imageshack.com/
Utilisateur anonyme
En effet dans le code que j'ai donné, je n'ajoutais aucune valeur. Mais dans mon vrai code, je le faisais.
En fait, j'ai supprimé columnspan et rowspan et ça a l'air de fonctionner.
Comme tu l'utilisais dans ton code, je l'avais mis aussi (ça m'apprendra à réfléchir un peu plus..)
Je finis mes tests et je posterai un message pour dire si ça marche.
Enocre merci
Utilisateur anonyme
Bon ça marche.
Les problèmes venaient des 'rowspan' et 'columnspan'.
Merci
Messages postés
32840
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 430
Good.