wxPython 交换图像
wxPython Swap Images
我一直在尝试交换列表中的 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()
我完全不明白 self.ic
应该是什么(wx.StaticBitmap
个实例的列表或 wx.Bitmap
个实例的列表)。你似乎混淆了两者。 StaticBitmap
是一个 wxPython
小部件,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()
我一直在尝试交换列表中的 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()
我完全不明白 self.ic
应该是什么(wx.StaticBitmap
个实例的列表或 wx.Bitmap
个实例的列表)。你似乎混淆了两者。 StaticBitmap
是一个 wxPython
小部件,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()