application - python gtk textview
¿Cómo auto-desplazar un gtk.scrolledwindow? (3)
Después de ampliar mi radio de búsqueda, encontré una respuesta relacionada con el rubí. Dado que el problema está relacionado con gtk, debería poder resolverse en cualquier idioma como este:
conecta el widget que cambia, en mi caso la vista de árbol, con la gtk.widget
'' gtk.widget
tamaño'' de gtk.scrolledwindow
y configura el valor de gtk.scrolledwindow
en "upper - page_size". ejemplo:
self.treeview.connect(''size-allocate'', self.treeview_changed)
...
def treeview_changed(self, widget, event, data=None):
adj = self.scrolled_window.get_vadjustment()
adj.set_value( adj.upper - adj.page_size )
enlace a la publicación original en ruby-forum.com:
Tengo un widget de vista dentro de un ScrolledWindow
, que se llena durante el tiempo de ejecución. Quiero que ScrolledWindow
automáticamente hasta el final de la lista. " vadjustment
" el problema, ajustando el vadjustment
de ScrolledWindow
, cada vez que se inserta una fila en la vista de árbol. p.ej:
if new_line_in_row:
adj = self.scrolled_window.get_vadjustment()
adj.set_value( adj.upper - adj.page_size )
Si ejecuto el código en una sesión interactiva de ipython y establezco el valor por mí mismo, todo funciona como se espera.
Si ejecuto el código con el intérprete de python predeterminado, el desplazamiento automático no funciona todo el tiempo. Depuré el código y el problema parece ser que los valores de ajuste tienen algún tipo de "retraso" y solo se modifican después de un período de tiempo.
Mi pregunta es: ¿cómo me desplazo, de manera confiable, a la posición máxima de la ScrolledWindow
de ScrolledWindow
? ¿Se genera una señal especial que puedo usar? ¿O hay una mejor manera de establecer el adjustment-value
?
La respuesta de fookatchu se puede mejorar para que la devolución de llamada pueda ser utilizada por varios widgets:
def treeview_changed( self, widget, event, data=None ):
adj = widget.get_vadjustment()
adj.set_value( adj.upper - adj.pagesize )
Versión Python Gtk 3:
adj.set_value(adj.get_upper() - adj.get_page_size())