Scroll

 

ulis, 2006-11-25. Un package pour scroller les widgets.

2007-06-17. v 1.0.2, correction d'un bug quand on manipule l'ascenseur d'un frame.

Oui, je sais, c'est déjà en standard dans Tk. Mais avec Scroll c'est encore plus facile.

Si !

  scroll canvas .c -width 150 -height 200
  scroll frame .f -width 150 -height 200
  scroll text .t -height 10 -width 20
  scroll listbox .lb -height 10 -width 20

Bon. Pour le frame, il faut le vouvoyer et demander la permission :

  set sf [.f scrolled]
  label $sf.l -text "I'm scrolled!"
  grid $sf.l

Pourquoi

Intégrer des scrollbars pour pouvoir scroller un canvas ou une listbox devrait être moins sportif.

Surtout pour les débutants.


Comment

Un frame pour envelopper le widget et ses scrollbars.

Pour le frame, bin comme d'habitude : scrollframe et tutti frutti.


Installation


Le script pkgIndex.tcl

  package ifneeded Scroll 1.0 [list source [file join $dir scroll.tcl]]

Demo 1

  package require Scroll
  scroll frame .sf -width 200 -height 200 -bg gold \
    -bd 1 -relief groove
  set f [.sf scrolled]
  foreach i {1 2 3 4 5 6} \
  {
    label $f.l$i -text "I'm label $i" \
      -bd 2 -relief ridge -width 20
    grid $f.l$i -padx 10 -pady 5
  }
  grid .sf -row 0 -column 0 -sticky nsew
  grid rowconfig . 0 -weight 1
  grid columnconf . 0 -weight 1

Demo 2

  package require Scroll
  scroll canvas .c -width 150 -height 150
  set y 10
  foreach fruit {orange banane citron orange ananas framboise cassis raisin} \
  {
    .c create rectangle 25 $y 125 [expr {$y + 20}] -fill gold
    .c create text 75 [expr {$y + 10}] -text $fruit
    incr y 25
  }
  grid .c -row 0 -column 0 -sticky nsew
  grid rowconfig . 0 -weight 1
  grid columnconf . 0 -weight 1
  bind .c <Configure> \
  {
    set width [winfo width .]
    incr width $width
    set height [winfo height .]
    incr height $height
    .c config -scrollregion \
      [list 0 0 $width $height]
  }

Voir Aussi


Discussion

ulis Oui, je sais que c'est lassant de toujours faire la même chose. Mais là, c'est la bonne.

(avant la prochaine fois ?)


Catégorie Paquet | Catégorie Interface utilisateur