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?

Était-ce utile?

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]
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top