wxPython交换图像

时间:2015-02-24 14:51:09

标签: image wxpython

我一直试图在列表中交换2张图片。我将列表添加到1行和2列的GridSizer中。我有一个水平的BoxSizer,我在其中添加了GridSizer以及一个按钮,当点击时,图片应该被交换。但我得到类型错误字符串或unicode要求。 我在Linux Mint 64位笔记本电脑上使用Python 2.7.6和wxPython 2.8.12.1(gtk2-unicode)。以下是我的程序中发生错误的部分。 请帮忙。

感谢。

def OnOk(self, event):
    x = wx.Image(self.ic[0], wx.BITMAP_TYPE_ANY).Scale(200, 200)
    y = wx.Image(self.ic[1], wx.BITMAP_TYPE_ANY).Scale(200, 200)
    self.ic[0].SetBitmap(wx.StaticBitmap(self, wx.ID_ANY, wx.BitmapFromImage(y)))
    self.ic[1].SetBitmap(wx.StaticBitmap(self, wx.ID_ANY, wx.BitmapFromImage(x)))
    self.Refresh()

1 个答案:

答案 0 :(得分:1)

我完全不明白self.ic应该是什么(wx.StaticBitmap个实例列表或wx.Bitmap个实例列表)。你似乎混淆了两者。 StaticBitmapwxPython小部件,wx.Bitmap只是一个包含位图数据的数据结构。

请参阅下面的工作示例:

import wx

class bmpframe(wx.Frame):
    def __init__(self, *args, **kwds):
        wx.Frame.__init__(self, *args, **kwds)

        pnl = wx.Panel(self, -1)
        # lazy way to make two discernable bitmaps
        # Warning: alpha does not work on every platform/version
        bmp1 = wx.EmptyBitmapRGBA(64, 64, alpha=0)
        bmp2 = wx.EmptyBitmapRGBA(64, 64, alpha=1)

        static_bitmap_1 = wx.StaticBitmap(pnl, -1, bitmap=bmp1)
        static_bitmap_2 = wx.StaticBitmap(pnl, -1, bitmap=bmp2)
        self.stbmp1 = static_bitmap_1
        self.stbmp2 = static_bitmap_2

        self.btn_swap = wx.Button(pnl, -1, u'Swap…')

        szmain = wx.BoxSizer(wx.VERTICAL)
        szmain.Add(static_bitmap_1, 0, wx.EXPAND|wx.ALL, 4)
        szmain.Add(static_bitmap_2, 0, wx.EXPAND|wx.ALL, 4)
        szmain.Add(self.btn_swap, 0, wx.EXPAND|wx.ALL, 4)

        pnl.SetSizer(szmain)
        szmain.Fit(self)

        self.btn_swap.Bind(wx.EVT_BUTTON, self.on_swap)

    def on_swap(self, evt):
        print 'EVT_BUTTON'
        bmp1 = self.stbmp1.GetBitmap()
        bmp2 = self.stbmp2.GetBitmap()
        self.stbmp1.SetBitmap(bmp2)
        self.stbmp2.SetBitmap(bmp1)
        self.Refresh()

if __name__ == '__main__':
    app = wx.App(redirect=False)
    frm = bmpframe(None, -1, 'testbmpswap')
    frm.Show()

    app.MainLoop()