2009-09-09 50 views
2

我正在使用wxPython wx.html.HtmlWindow來顯示我的界面的一部分。用戶可以在小於列表的窗口中向下滾動鏈接列表。當他們點擊鏈接時,我需要重新繪製網頁,但是我想將頁面位置返回到他們點擊它的位置。我試過MouseEvent.GetLogicalPosition()事件,但它想要一個DC,我已經能夠做的最好的獲得與GetPosition()相同的信息,所以我不能給它正確對象,真愛。如何將wxPython wx.html.HtmlWindow滾動回用戶點擊鏈接時的位置?

我也試過HtmlWindow.CalcScrolledPosition(),但顯然這是不具備的HtmlWindow,因爲我得到一個NotImplementedError ...

我想是可以從的MouseEvent得出一個滾動位置,或OnLinkClicked信息。

我知道HtmlWindow.ScrollToAnchor(),但它的片狀,無美感 - 我寧願如果可能繞過它,這樣我可以回準確滾動到用戶單擊的位置。

謝謝!

+0

你不能使用wxHtmlWindow :: HistoryBack(),哪個AFAIK,會回滾到用戶點擊的位置? – 2009-09-09 15:30:48

+0

這不太合適 - 頁面內容改變了,我只想讓它顯示在同一個滾動位置。想想你如何在HTML中實現類似樹控件的東西 - 你點擊一個鏈接來打開更多關於它的信息,但是你不希望頁面每次都跳回頂部。謝謝! – oofoe 2009-09-09 17:49:24

回答

2

一下怎麼樣看source of wxHtmlWindow的靈感?在wxHtmlWindow::LoadPage()例如:它

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

這個保存的滾動位置在wxHtmlWindow::HistoryBack()使用:

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

回到保存的位置。

我會假設,這個內置的「走對了,最後的位置,在窗口」處理是不是最「片狀,缺乏美感」。你也可以爲你做類似的工作嗎?

+0

我用這個變種結束了。非常感謝! – oofoe 2012-04-10 21:06:34

0

通常情況下,單擊事件是由事件的MouseUp觸發。如果通過捕獲任何MouseDown事件來追蹤鼠標位置,您將知道最後一次點擊(MouseUp)發生的位置,並且應該允許您重新構建事物。

對於這個特定的問題,你可能需要做更多的工作中的MouseDown像檢查,如果他們是wxHtmlWindow控制範圍之內,如果是這樣,那麼節省像行號。

1

也許有點晚,但與斧頭一些技巧,並從here一些提示,我認爲叫:

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

並存儲,再後來做了呼籲:

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

爲我工作。當然,您需要將wx.html.HtmlWindow更改爲對實例的實際引用。

1

下面是我在做什麼,以滾動頁面,以前的位置。 我這樣做是爲了避免眨眼。

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