Comment définir la taille maximale de ScrolledWindow de BWidget?
Question
J'utilise le BWidget
de ScrolledWindow
dans un code comme ceci:
toplevel .top
set w [ScrolledWindow .top.scrolledWindow]
set f [ScrollableFrame $w.scrollableFrame -constrainedwidth true]
$w setwidget $f
set a [$f getframe]
# here goes some stuff in $a
Je reçois une fenêtre avec barre de défilement vertical. Quand on augmente la hauteur de .top
, après un certain moment, tout le contenu dans $a
devient visible et la barre de défilement disparaît car il est plus nécessaire. Comment puis-je interdire encore augmenter la hauteur de .top
? à-dire que je dois régler la hauteur maximale de .top
à la valeur quand tout le contenu de $ a est visible. Comment puis-je faire?
La solution
Pour régler la hauteur maximale d'un premier niveau, vous utilisez wm maxsize
, peut-être avec une très grande valeur pour la taille horizontale. Pour obtenir la taille actuelle de celui-ci, vous utilisez winfo height
(et winfo width
dans l'autre dimension). La combinaison de celles-ci:
# 10k is just a "big" number
wm maxsize .top 10000 [winfo height .top]
Maintenant, le plus délicat avec BWidget est qu'il ne définit pas la taille de la fenêtre immédiatement, ou même sur le premier écran. Cela signifie que vous devez mettre dans une supposition quand pour configurer la fenêtre. Une chose pas cher est d'essayer de le mettre une demi-seconde à l'avenir; après tout, même les utilisateurs experts doivent probablement passer au moins un peu tout en regardant avant d'interagir avec elle. Cela se fait avec after
comme ceci:
# 500 milliseconds in the future
after 500 {
# 10k is just a "big" number
wm maxsize .top 10000 [winfo height .top]
}