Come faccio a scorrere un wxPython wx.html.Html Torna indietro a dove era quando l'utente ha fatto clic su un collegamento?

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

  •  05-07-2019
  •  | 
  •  

Domanda

Sto usando un wxPython wx.html.HtmlWindow per visualizzare parte della mia interfaccia. L'utente può scorrere verso il basso un elenco di collegamenti in una finestra più piccola dell'elenco. Quando fanno clic su un collegamento, devo ridipingere la pagina Web, ma voglio riportare la posizione della pagina nel punto in cui l'hanno cliccata.

Ho provato MouseEvent.GetLogicalPosition () sull'evento, ma vuole un controller di dominio e il meglio che ho potuto fare è ottenere le stesse informazioni di GetPosition (), quindi non devo dargli da mangiare uno.

Ho anche provato HtmlWindow.CalcScrolledPosition (), ma a quanto pare non è disponibile in HtmlWindow perché ottengo un NotImplementedError ...

Quello che vorrei è una posizione di scorrimento che può essere derivata da MouseEvent o dalle informazioni di OnLinkClicked.

So di HtmlWindow.ScrollToAnchor (), ma è traballante e antiestetico - Preferirei bypassarlo, se possibile, in modo da poter scorrere indietro esattamente dove l'utente ha fatto clic.

Grazie!

È stato utile?

Soluzione

che ne dici di dare un'occhiata al fonte di wxHtmlWindow per ispirazione? ad esempio a wxHtmlWindow :: LoadPage () : it

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

questa posizione di scorrimento salvata viene utilizzata in wxHtmlWindow :: HistoryBack () :

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

per tornare alla posizione salvata.

Suppongo che questo "quot-to-the-last-position-in-window" incorporato la manipolazione non è la più "traballante e antiestetica". qualcosa di simile potrebbe funzionare anche per te?

Altri suggerimenti

Forse un po 'in ritardo, ma con alcuni suggerimenti da axe e alcuni suggerimenti da qui , penso che chiamare:

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

e memorizzandolo, e poi facendo una chiamata a:

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

funziona per me. Ovviamente, devi cambiare wx.html.HtmlWindow in un riferimento effettivo a un'istanza.

Ecco cosa sto facendo per scorrere la pagina alla posizione precedente. Lo faccio per evitare di lampeggiare.

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

Di solito, gli eventi clic vengono attivati ??dagli eventi MouseUp. Se segui la posizione del mouse acquisendo eventi MouseDown, saprai dove si è verificato l'ultimo clic (MouseUp) e ciò dovrebbe permetterti di ricostruire le cose.

Per questo particolare problema, potresti dover fare un po 'più di lavoro in MouseDown come verificare se sono all'interno del controllo wxHtmlWindow e, in tal caso, quindi salvare qualcosa come un numero di riga.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top