Comparaison des geometry managers

 

ulis, 2006-01-19. Comparaison des geometry managers (gestionnaires de géométrie) de Tk : grid, pack et place.


Pourquoi

Pour choisir le bon geometry manager en connaissance de cause.


Comment

En comparant trois scripts qui affichent la fenêtre dynamique ci-dessus : un text et ses scrollbars associées.


Grid

  # create widgets
  text .t
  scrollbar .hs -orient horizontal
  scrollbar .vs -orient vertical
  # show/place widget
  grid .t  -row 0 -column 0 -sticky nsew
  grid .vs -row 0 -column 1 -sticky ns
  grid .hs -row 1 -column 0 -sticky ew
  # resize widgets in parent
  grid rowconfigure    . 0 -weight 1
  grid columnconfigure . 0 -weight 1

Commentaires

Qualités

Défauts


Pack

  # create widgets
  frame .f
  frame .f.g
  text .f.g.t
  scrollbar .f.g.vs -orient vertical
  frame .f.h
  scrollbar .f.h.hs -orient horizontal
  canvas .f.h.c -width 0 -height 0 \
     -bd 0 -highlightt 0
  # show/place widgets
  pack .f       -fill both -expand 1
  pack .f.g     -fill both -expand 1 -side top
  pack .f.h     -fill x    -expand 0 -side bottom
  pack .f.g.t   -fill both -expand 1 -side left
  pack .f.g.vs  -fill y    -expand 0 -side right
  pack .f.h.hs  -fill x    -expand 1 -side left
  pack .f.h.c              -expand 0 -side right
  # size widgets
  update
  set w2 [winfo width .f.g.vs]
  .f.h.c config -width $w2

Commentaires

Qualités

Défauts


Place

  # create widgets
  text .t
  scrollbar .hs -orient horizontal
  scrollbar .vs -orient vertical
  # show/place widgets
  place .t -x 0 -y 0 -anchor nw
  place .vs -relx 1.0 -y 0 -anchor ne
  place .hs -x 0 -rely 1.0 -anchor sw
  # size parent from widgets
  update
  set w1 [winfo width .t]
  set w2 [winfo width .vs]
  set h1 [winfo height .t]
  set h2 [winfo height .hs]
  set width [expr {$w1 + $w2}]
  set height [expr {$h1 + $h2}]
  . config -width $width -height $height
  # resize widgets in parent
  set resizing 0
  proc resize {} \
  {
    if {$::resizing} { return }
    set ::resizing 1
    set width [winfo width .]
    set height [winfo height .]
    set w1 [expr {$width - $::w2}]
    set h1 [expr {$height - $::h2}]
    place .t -width $w1 -height $h1
    place .vs -height $h1
    place .hs -width $w1
    set ::resizing 0
  }
  bind . <Configure> resize

Commentaires

Qualités

Défauts


Voir aussi


Discussion


Catégorie Interface utilisateur | Catégorie Exemple