【问题标题】:Scrolling a painted frame in wxPython在 wxPython 中滚动绘制的框架
【发布时间】:2013-02-28 18:48:56
【问题描述】:

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

环顾四周,似乎我可能想使用 wxScrolledPanel 而不是 wxPanel。但是,我没有成功使用它 - 使用 wxScrolledPanel 是否仅在使用控件(例如按钮、文本字段)而不是在设备上下文上绘画时才有效?

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

【问题讨论】:

    标签: wxpython paint gdi


    【解决方案1】:

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

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

    【讨论】:

    • 我不久前遇到了 wxPython 提供的 ScrolledWindow 演示,并且一直在摆弄它 - 解决方案与您描述的完全一样。我之前尝试使用 ScrolledPanel 时遇到的问题似乎是因为我只调用了 SetVirtualSize,而我还需要调用 SetScrollRate。我最初也没有调用 PrepareDC,这导致绘图不会更新为滚动。我已将此标记为答案,谢谢。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 2014-11-03
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2011-03-22
      • 2011-01-04
      相关资源
      最近更新 更多