Bonjour,

voici (encore) un petit problème pour les ceintures marrons de Tkinter :

Je créé une petite GUI divisée en 4 frames (2x2).
Chaque frame est en fait un "doublet de frames", une visible, l'autre invisible.
Quand je clique sur une frame, elle devient invisible et c'est son double qui devient visible (ce sera plus facile à comprendre en testant le code).
Jusqu'ici, ça marche impec'
Le hic, c'est que la frame et son double n'ont pas la même taille est que du coup, l'appli se redimensionne toute seule selon les tailles respectives des frames visibles (il faut vraiment essayer pour visualiser...)

--> ma question : comment faire pour que les 2 frames de chaque doublet aient la même taille ?
Ou encore, comment éviter que l'appli se redimensionne ?
--> un truc du genre : je créé les 2 frames de mon doublet, je calcule leur taille, puis je force la plus petite à la taille de la plus grande.

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
37
38
39
40
import Tkinter
 
def TestGUI () :
 
    # classe Cell = 2 frames superposees : 1 visible + 1 invisible
    class Cell:
 
        def __init__(self,x,y):
            self.visible  = 0           # indice de la frame visible
            self.frame    = [None,None] # les 2 frames superposees
            self.x,self.y = x,y         # coord de la frame
 
        def clic( self,event=None ):
            self.frame[self.visible].grid_forget() # rend la frame invisible
            self.visible = 1-self.visible          # inverse les visibilites des 2 frames
            self.frame[self.visible].grid( column=self.x,row=self.y, sticky=Tkinter.NSEW ) # rend la frame visible 
 
    grid  = [[ Cell(x,y) for x in xrange( 2 ) ] for y in xrange( 2 ) ]
    root  = Tkinter.Tk()
    frame = Tkinter.Frame( root )
    # cree 4 frames disposees en 2 x 2
    for y in xrange( 2 ):
        for x in xrange( 2 ):
            cell = grid[y][x]
 
            cell.frame[0] = Tkinter.Frame( frame,relief = Tkinter.SUNKEN , borderwidth = 4)
            txt = Tkinter.Label( cell.frame[0],text = 'very\nvery\nvery\nvery big\nand very very very large frame %d,%d'%(x,y))
            txt.pack( expand = 1 )              
            txt.bind('<Button-1>',cell.clic )
 
            cell.frame[1] = Tkinter.Frame( frame,relief = Tkinter.RAISED , borderwidth = 4)
            txt = Tkinter.Label( cell.frame[1],text = 'small frame %d,%d'%(x,y))
            txt.pack( expand = 1 )              
            txt.bind('<Button-1>',cell.clic )
 
            cell.clic()
    frame.pack() 
    root.mainloop()
 
TestGUI()
Merci d'avance !