Wie blättere ich eine WxPython wx.html.HtmlWindow zurück nach unten, wo es war, wenn der Benutzer auf einen Link geklickt?

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

  •  05-07-2019
  •  | 
  •  

Frage

Ich bin mit einem WxPython wx.html.HtmlWindow Teil meiner Schnittstelle anzuzeigen. Der Anwender kann in einem Fenster kleiner als die Liste eine Liste von Links nach unten scrollen. Wenn sie auf einen Link klicken, muss ich die Web-Seite neu zu zeichnen, aber ich möchte die Seite Position zurückzukehren, wo sie es angeklickt wird.

Ich habe MouseEvent.GetLogicalPosition () auf das Ereignis versucht, aber es will einen DC und das Beste, was ich tun konnte habe, ist die gleiche Information wie GetPosition (), so dass ich darf nicht das Recht einspeisen ein.

Ich habe versucht HtmlWindow.CalcScrolledPosition auch (), aber anscheinend ist nicht verfügbar in Htmlwindow, weil ich eine bekommen NotImplementedError ...

Was ich möchte, ist eine Scroll-Position, die von der Mouse abgeleitet werden kann, oder die OnLinkClicked Informationen.

Ich weiß, über HtmlWindow.ScrollToAnchor (), aber es ist flockig und unästhetisch - ich würde es vorziehen, sie wenn möglich zu umgehen, so dass ich zurückblättern kann genau , wo der Benutzer geklickt

Danke!

War es hilfreich?

Lösung

, wie etwa a href einen Blick auf dem wxHtmlWindow::LoadPage() : es

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

Diese Scroll-Position gespeichert in wxHtmlWindow::HistoryBack() :

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

, um wieder auf die gespeicherte Position.

Ich würde davon ausgehen, dass diese integrierte "Go-to-the-last-Position-in-Fenster" Handhabung nicht die "schuppig und unästhetisch" ist. könnte etwas ähnliche Arbeit für Sie auch?

Andere Tipps

Vielleicht ein bisschen spät, aber mit ein paar Tipps von Axt, und einige Hinweise von hier , denke ich, dass Aufruf:

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

und speichert das, und dann später einen Anruf zu tun zu:

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

funktioniert für mich. Natürlich brauchen Sie wx.html.HtmlWindow zu einem tatsächlichen Verweise auf eine Instanz zu ändern.

Hier ist, was ich Seite zur vorherige Position blättern tue. Ich mache das Blinken zu vermeiden.

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

In der Regel finden Sie Veranstaltungen von MouseUp Event trigged werden. Wenn Sie die Mausposition Ereignisse durch die Erfassung keine MouseDown- verfolgen, werden Sie wissen, wo der letzte Klick (MouseUp) passiert ist, und das sollte man die Dinge rekonstruieren lassen.

Für dieses besondere Problem, könnte man ein bisschen mehr Arbeit in MouseDown- zu tun hat, wie die Überprüfung, ob sie innerhalb der wxHtmlWindow Kontrolle ist, und wenn ja, dann so etwas wie eine Zeilennummer zu speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top