在wxPython中滚动绘制的帧

在wxPython中滚动绘制的帧,wxpython,paint,gdi,Wxpython,Paint,Gdi,目前,我有一个wxPanel,我使用wx.PaintDC中的设备上下文在其上绘制线条、文本等,以响应绘制事件。但是,我的绘图可能会超出面板的大小,并且会在可见屏幕之外继续绘制。查看更多图形的唯一方法是扩展应用程序窗口,这是不切实际的,并且在非常大的图形中可能仍不允许查看完整图形。理想情况下,我希望能够滚动图形,以便不需要调整应用程序窗口的大小,并且可以看到大型图形 环顾四周,我似乎想使用wxScrolledPanel而不是wxPanel。但是,我在使用这个方面没有成功-使用wxScrolledP

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

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


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

它应该与滚动面板一起工作,但如果面板上没有其他小部件,这可能不是正确的答案,因为它取决于是否有一个尺寸器来设置虚拟大小


尝试改用wx.scrolled窗口,并在演示中查看其示例以获取一些代码。基本上,您只需要设置窗口的虚拟大小,它将为您处理滚动条和滚动。您还需要在绘制事件处理程序中调用PrepareDC,以便它将偏移图形以匹配滚动视口原点。

它应该与滚动面板一起工作,但如果面板上没有其他小部件,则可能不是正确的答案,因为它取决于是否有大小调整器来设置虚拟大小


尝试改用wx.scrolled窗口,并在演示中查看其示例以获取一些代码。基本上,您只需要设置窗口的虚拟大小,它将为您处理滚动条和滚动。您还需要在绘制事件处理程序中调用PrepareDC,这样它将偏移图形以匹配滚动的视口原点。

我在StackOverflow上找到了以下答案,我想您可能想看看:

这些答案似乎集中在wx.ScrolledWindow上,但是我认为您可以使用这些答案中的概念,并将它们与ScrolledPanel一起使用。我还发现了这个有趣的线索:


我在StackOverflow上找到了以下答案,我想您可能会想看看:

这些答案似乎集中在wx.ScrolledWindow上,但是我认为您可以使用这些答案中的概念,并将它们与ScrolledPanel一起使用。我还发现了这个有趣的线索:


不久前,我在wxPython上看到了Scrolled Window演示,一直在摆弄它——解决方案正是您所描述的。我之前尝试使用Scrolled面板时遇到的问题似乎是因为我只调用了SetVirtualSize,而我还需要调用SetScrollRate。我最初也没有调用PrepareDC,这导致图形不会随着滚动而更新。我已将此标记为答案,谢谢。我不久前在wxPython上看到了Scrolled Window演示,并一直在摆弄它-解决方案正是您所描述的。我之前尝试使用Scrolled面板时遇到的问题似乎是因为我只调用了SetVirtualSize,而我还需要调用SetScrollRate。我最初也没有调用PrepareDC,这导致图形不会随着滚动而更新。我已将此标记为答案,谢谢。