2013-02-28 6 views
0

В настоящее время у меня есть wxPanel, в который я рисую строки, текст и т. Д. В ответ на события рисования, используя контекст устройства из wx.PaintDC. Однако мой чертеж может превышать размер панели, и он продолжается с видимого экрана. Единственный способ увидеть больше чертежа - это расширить окно приложения, которое нецелесообразно и все еще не позволяет увидеть полный чертеж в случае очень больших чертежей. В идеале, я хочу, чтобы иметь возможность прокручивать чертеж так, чтобы окно приложения не нуждалось в изменении размера, и можно увидеть большие рисунки.Прокрутка раскрашенной рамки в wxPython

Оглядываясь, кажется, что я могу использовать wxScrolledPanel вместо wxPanel. Тем не менее, я не имел никакого успеха в использовании этого - будет ли использование wxScrolledPanel работать только при использовании элементов управления (например, кнопок, текстовых полей), а не рисования в контексте устройства?

Каким образом можно прокручивать панель, нарисованную?

ответ

2

Он должен работать с ScrolledPanel, но если у вас не будет других виджетов на панели, это, вероятно, не правильный ответ, поскольку он зависит от того, как sizer устанавливает виртуальный размер.

Попробуйте вместо этого использовать wx.ScrolledWindow и посмотрите его образец в демо для некоторого кода. В основном вам просто нужно установить виртуальный размер окна, и он позаботится о полосах прокрутки и прокрутит для вас. Вам также нужно будет вызвать PrepareDC в обработчике событий рисования, чтобы он смещал чертеж в соответствии с прокрученным пространством просмотра.

+1

Я наткнулся на демо ScrolledWindow доступный из WxPython некоторое время назад, и было возиться с этим - решение именно так, как вы описываете , Проблема, с которой я столкнулась при попытке использовать ScrolledPanel раньше, похоже, связана с тем, что я называл SetVirtualSize, тогда как мне также нужно было вызвать SetScrollRate. Я изначально также не вызывал PrepareDC, что приводило к тому, что чертеж не обновлялся как прокрутка. Я отметил это как ответ, спасибо. – KingJ

1

я нашел следующие ответы на StackOverflow, что я думаю, вы, вероятно, хотите посмотреть на:

Эти ответы, кажется, сосредоточиться на wx.ScrolledWindow, однако я думаю, что вы можете использовать концепции в этих ответах и ​​использовать их с помощью ScrolledPanel. Я также нашел интересную нить по этому вопросу:

Смежные вопросы