【问题标题】:Vertical offset when displaying an image with wxPython使用 wxPython 显示图像时的垂直偏移
【发布时间】:2016-02-23 12:05:30
【问题描述】:

这是我们如何在 wxPython 框架中显示图像的方法。

import wx

class Viewer(wx.App):
    def __init__(self, redirect=False, filename=None):
        wx.App.__init__(self, redirect, filename)
        self.frame = wx.Frame(None, title='Viewer')
        self.panel = wx.Panel(self.frame)
        self.imageCtrl = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.BitmapFromImage(wx.EmptyImage(800,600)))
        self.mainSizer = wx.BoxSizer(wx.VERTICAL)
        self.mainSizer.Add(self.imageCtrl, 0, wx.ALL, 5)
        self.onView('0.png')
        self.panel.Layout()        
        self.frame.Show()

    def onView(self, filename):
        img = wx.Image(filename, wx.BITMAP_TYPE_ANY)
        self.imageCtrl.SetBitmap(wx.BitmapFromImage(img))
        self.panel.Refresh()
        self.mainSizer.Fit(self.frame)
        
Viewer().MainLoop()

如果测试图像尺寸较大,例如912 x 3616(这里是我用的0.png),我想设置一个垂直偏移,即框架的上角不应该是(0,0)图像但 (0,500) 即 500px 垂直偏移。

如何使用 wxPython 设置图像的垂直偏移量?

【问题讨论】:

    标签: python wxpython wxwidgets sizer


    【解决方案1】:

    如果你真的想截断图像,最直接的做法就是直接执行,即使用wxImage::GetSubImage() 创建一个区域从 (0, 500) 开始的新图像。

    更常见的是,您会使用滚动窗口,然后最初可以将其垂直滚动 500,但仍允许用户滚动回原点。

    也可以使用不带滚动条的滚动窗口,但这似乎毫无意义。

    【讨论】:

    • 我尝试裁剪它(这与 DOWN、UP 等键盘键相关联),但每次重绘 self.imageCtrl.SetBitmap(wx.BitmapFromImage(img)) 时都会出现闪烁。您知道如何避免这种闪烁吗?
    • 如果你想用按键滚动它,使用滚动窗口。在任何情况下,绝对不要将wxStaticBitmap 用于大图像,特别是如果您需要更改它们,而是自己绘制它们。如文档中所述,wxStaticBitmap 用于对话框中的小图标,而不是通用图像显示。
    • 谢谢@VZ。你有一些代码示例来说明我应该怎么做吗?
    • 您可以在 wxWidgets scroll 示例中找到使用滚动窗口的示例,但它们使用的是 C++,而不是 Python。我希望 wxPython 演示也包含一个使用它的示例。
    猜你喜欢
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多