2013-02-28 80 views
0

我目前有一个wxPanel,我通过使用wx.PaintDC的设备上下文绘制线条,文本等来响应绘制事件。但是,我的绘图可能会超出面板的大小,并会从可见屏幕上继续显示。要看到更多的图纸的唯一方法是扩大应用程序窗口,这是不切实际的,并且仍然可能不允许在非常大的图纸情况下看到完整的图纸。理想情况下,我希望能够滚动绘图,以便应用程序窗口不需要调整大小,并可以看到大图。在wxPython中滚动画框

环顾四周,似乎我可能想使用wxScrolledPanel而不是wxPanel。但是,我没有成功使用这个 - 使用wxScrolledPanel只在使用控件(例如按钮,文本字段)时才工作,而不是在设备上下文中绘制?

滚动已绘制面板的适当方法是什么?

回答

2

它应该与一个ScrolledPanel一起工作,但如果你不在面板上有其他的小部件,它可能不是正确的答案,因为它取决于有一个sizer来设置虚拟大小。

尝试使用wx.ScrolledWindow代替,并在演示中查看它的示例中的代码。基本上你只需要设置窗口的虚拟大小,它会照顾滚动条并为你滚动。您还需要在绘画事件处理程序中调用PrepareDC,以便使绘图偏移以匹配滚动的视口原点。

+1

我整个ScrolledWindow演示来提供的wxPython曾几何时,并已与该摆弄周围 - 该解决方案是完全按照你描述。之前尝试使用ScrolledPanel时遇到的问题似乎是因为我只调用SetVirtualSize,而我也需要调用SetScrollRate。我最初并没有调用PrepareDC,导致绘图不能像滚动一样更新。我已将此标记为答案,谢谢。 – KingJ 2013-02-28 23:02:20