Google 網路論壇不再支援新的 Usenet 貼文或訂閱項目,但過往內容仍可供查看。

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

觀看次數:10 次
跳至第一則未讀訊息

er...@rail.eu.org

未讀,
2012年2月23日 上午5:09:4423/2/2012
收件者︰

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

未讀,
2012年2月23日 上午8:42:5423/2/2012
收件者︰
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

未讀,
2012年2月23日 上午9:42:5823/2/2012
收件者︰
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

未讀,
2012年2月23日 上午10:59:4923/2/2012
收件者︰
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 則新訊息