¿Cómo vuelvo a wxPython wx.html.HtmlWindow de nuevo a donde estaba cuando el usuario hizo clic en un enlace?

StackOverflow https://stackoverflow.com/questions/1400179

  •  05-07-2019
  •  | 
  •  

Pregunta

Estoy usando un wxPython wx.html.HtmlWindow para mostrar parte de mi interfaz. El usuario puede desplazarse hacia abajo en una lista de enlaces en una ventana más pequeña que la lista. Cuando hacen clic en un enlace, necesito volver a pintar la página web, pero quiero devolver la posición de la página a donde hicieron clic.

He intentado MouseEvent.GetLogicalPosition () en el evento, pero quiere un DC y lo mejor que he podido hacer es obtener la misma información que GetPosition (), por lo que no debo alimentarlo correctamente uno.

También probé HtmlWindow.CalcScrolledPosition (), pero aparentemente eso no está disponible en HtmlWindow porque obtengo un NotImplementedError ...

Lo que me gustaría es una posición de desplazamiento que se pueda derivar del MouseEvent o de la información OnLinkClicked.

Sé sobre HtmlWindow.ScrollToAnchor (), pero es escamoso y poco estético; preferiría omitirlo si es posible para poder retroceder exactamente a donde hizo clic el usuario.

¡Gracias!

¿Fue útil?

Solución

¿qué tal si echamos un vistazo a fuente de wxHtmlWindow para inspirarte? por ejemplo, en wxHtmlWindow :: LoadPage () : it

// store[s the current] scroll position into history item:
int x, y;
GetViewStart(&x, &y);
(*m_History)[m_HistoryPos].SetPos(y);

esta posición de desplazamiento guardada se usa en wxHtmlWindow :: HistoryBack () :

Scroll(0, (*m_History)[m_HistoryPos].GetPos());
Refresh();

para volver a la posición guardada.

supondría que esta función incorporada " ir a la última posición en la ventana " el manejo no es lo más escamoso y antiestético. ¿Podría algo similar funcionar para usted también?

Otros consejos

Tal vez un poco tarde, pero con algunos consejos de ax y algunos consejos de aquí , creo que llamando:

scrollpos = wx.html.HtmlWindow.GetViewStart()[1]

y almacenar eso, y luego hacer una llamada a:

wx.html.HtmlWindow.Scroll(0, scrollpos)

funciona para mí. Por supuesto, debe cambiar wx.html.HtmlWindow a una referencia real a una instancia.

Esto es lo que estoy haciendo para desplazar la página a la posición anterior. Hago esto para evitar parpadear.

        pos = self.GetViewStart()[1]
        self.Freeze()
        self.SetPage(src)
        if save_scroll_pos:
            self.Scroll(0, pos)
        self.Thaw()

Por lo general, los eventos de clic son activados por los eventos de MouseUp. Si rastrea la posición del mouse capturando cualquier evento de MouseDown, sabrá dónde ocurrió el último clic (MouseUp), y eso le permitirá reconstruir las cosas.

Para este problema en particular, puede que tenga que trabajar un poco más en MouseDown, como verificar si están dentro del control wxHtmlWindow y, de ser así, guardar algo como un número de línea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top