Google'i grupid ei toeta enam uusi Useneti postitusi ega tellimusi. Ajalooline sisu jääb vaadatavaks.
Dismiss

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

10 vaatamist
Liigu esimese lugemata sõnumi juurde

er...@rail.eu.org

lugemata,
23. veebr 2012, 05:09:4423.02.12
kuni

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

lugemata,
23. veebr 2012, 08:42:5423.02.12
kuni
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

lugemata,
23. veebr 2012, 09:42:5823.02.12
kuni
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

lugemata,
23. veebr 2012, 10:59:4923.02.12
kuni
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 uut sõnumit