Как прокрутить wxPython wx.html.HtmlWindow обратно туда, где он был, когда пользователь щелкнул ссылку? - PullRequest
2 голосов
/ 09 сентября 2009

Я использую wxPython wx.html.HtmlWindow для отображения части моего интерфейса. Пользователь может прокрутить список ссылок в окне меньше, чем список. Когда они нажимают на ссылку, мне нужно перекрасить веб-страницу, но я хочу вернуть позицию страницы туда, где они ее щелкнули.

Я пытался использовать MouseEvent.GetLogicalPosition () для события, но ему нужен DC, и лучшее, что я смог сделать, - это получить ту же информацию, что и GetPosition (), поэтому я не должен выдавать его правильно один.

Я также попробовал HtmlWindow.CalcScrolledPosition (), но, очевидно, это не доступно в HtmlWindow, потому что я получаю NotImplementedError ...

Мне нужна позиция прокрутки, которая может быть получена из MouseEvent или информации OnLinkClicked.

Я знаю о HtmlWindow.ScrollToAnchor (), но он ненадежный и неэстетичный - я предпочел бы обойти его, если это возможно, чтобы я мог прокрутить точно туда, где пользователь щелкнул.

Спасибо!

Ответы [ 4 ]

2 голосов
/ 09 сентября 2009

как насчет вдохновения источника 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();

чтобы вернуться в сохраненную позицию.

Я бы предположил, что эта встроенная обработка «перейти к последней позиции в окне» не является самой «облупленной и неэстетичной». Может ли что-то подобное сработать для вас тоже?

1 голос
/ 21 декабря 2011

Вот что я делаю, чтобы прокрутить страницу до предыдущей позиции. Я делаю это, чтобы не мигать.

        pos = self.GetViewStart()[1]
        self.Freeze()
        self.SetPage(src)
        if save_scroll_pos:
            self.Scroll(0, pos)
        self.Thaw()
1 голос
/ 17 мая 2010

Может быть немного поздно, но с некоторыми советами от топора и некоторыми подсказками от здесь , я думаю, что звонит:

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

и сохраняем это, а затем делаем вызов:

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

у меня работает. Конечно, вам нужно изменить wx.html.HtmlWindow на фактическую ссылку на экземпляр.

0 голосов
/ 16 октября 2009

Обычно события щелчка инициируются событиями MouseUp. Если вы отслеживаете положение мыши путем захвата каких-либо событий MouseDown, вы будете знать, где произошел последний щелчок (MouseUp), и это должно позволить вам восстановить вещи.

Для этой конкретной проблемы вам может потребоваться выполнить немного больше работы в MouseDown, например, проверить, находятся ли они в элементе управления wxHtmlWindow, и, если это так, сохранить что-то вроде номера строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...