2015-02-24 4 views
0

Я пытался обменять 2 изображения в списке. Я добавляю список в GridSizer из 1 строки и 2 столбца. У меня есть один горизонтальный BoxSizer, где я добавляю GridSizer вместе с кнопкой, на которой при щелчке картинки должны быть заменены. Но я получаю строку типа ошибки или unicode. Я использую Python 2.7.6 и wxPython 2.8.12.1 (gtk2-unicode) на 64-битном ноутбуке Linux Mint. Ниже приведена часть моей программы, в которой происходит ошибка. Пожалуйста, помогите.wxPython Swap Images

Спасибо.

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() 
+0

Можете ли вы предоставить небольшой работоспособный пример? –

ответ

1

Я совершенно не понимаю, что self.ic должен быть (список wx.StaticBitmap экземпляров или список wx.Bitmap экземпляров). Кажется, вы смешиваете оба. A 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() 
+0

Да, ic - это список StaticBitmap. 'self.ic.append (wx.StaticBitmap (self, wx.ID_ANY, wx.BitmapFromImage (img1), name =" Pic1 "))' Большое спасибо. Ваш код решил проблему. – Joydeep

Смежные вопросы