Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[Ruby/TK] Rester à la fin d'une widget Text scrollable

10 views
Skip to first unread message

er...@rail.eu.org

unread,
Feb 23, 2012, 5:09:44 AM2/23/12
to

Je fais du rubyTk, mais je pense que le rpoblème est plus TK que ruby,
d'où la suite sur fr.comp.lang.tcl

Je veux une zone de texte scrollable pour que mon programme inscrive des
messages. J'aimerais que les nouveaux messages soient insérés à la fin,
et que le scroll soit automatique pour que kles derniers messages (ceux
du bas) soient affichés. Mon code (simplifié) actuil est le suivant:

@messagesZone=TkText.new(messagesFrame){
height 3
relief 'sunken'
state 'disabled'
wrap 'word'
grid 'row'=>0, 'column'=>1, :sticky=>'nsew'
}
@messageScroll=Tk::Tile::Scrollbar.new(messagesFrame) {
grid 'row'=>0, 'column'=>0, :sticky=>'ns'
}
@messagesZone.yscrollbar(@messageScroll)

TkGrid.columnconfigure(messagesFrame,1,:weight=>1)
TkGrid.rowconfigure(messagesFrame,0,:weight=>1)


La fonction d'ajout de message est

def addMessage(string)
@messagesZone.state('normal')
@messagesZone.insert('end',string)
@messagesZone.state('disabled')
end

Mais je ne vois pas quoi mettre dans cette fonction pour faire scroller,
car actuellement une fois la widget remplie, les nouveaux messages sont
invisibles, sauf à scroller soit même. Que faire pour obtenir ce
comportement ?

Merci.


--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé

winstin

unread,
Feb 23, 2012, 8:42:54 AM2/23/12
to
En tcl, je ferais un
.t yview end
après l'insertion.
Reste à savoir comment le traduire en Ruby.
Peut être @messagesZone.yview('end') ???
A+
Lionel

er...@rail.eu.org

unread,
Feb 23, 2012, 9:42:58 AM2/23/12
to
er...@rail.eu.org écrivait :

> La fonction d'ajout de message est
>
> def addMessage(string)
> @messagesZone.state('normal')
> @messagesZone.insert('end',string)
> @messagesZone.state('disabled')
> end
>
> Mais je ne vois pas quoi mettre dans cette fonction pour faire scroller,
> car actuellement une fois la widget remplie, les nouveaux messages sont
> invisibles, sauf à scroller soit même. Que faire pour obtenir ce
> comportement ?
>

Trouvé.
Il suffit d'ajouter un @messagesZone.see('end') après le insert.

er...@rail.eu.org

unread,
Feb 23, 2012, 10:59:49 AM2/23/12
to
winstin <lionel.wi...@gmail.com> écrivait :
Oui, c'est comme ça que ça se traduit.
Mais c'est un .t see end
qui marche.
0 new messages