#Boa:MiniFrame:ImageViewer
import wx
import os, tempfile
def create(parent):
return ImageViewer(parent)
imgs = {'.bmp' : wx.BITMAP_TYPE_BMP,
'.gif' : wx.BITMAP_TYPE_GIF,
'.png' : wx.BITMAP_TYPE_PNG,
'.jpg' : wx.BITMAP_TYPE_JPEG,
'.ico' : wx.BITMAP_TYPE_ICO}
[wxID_IMAGEVIEWER, wxID_IMAGEVIEWERSASHWINDOW1, wxID_IMAGEVIEWERSTATICBITMAP1,
] = [wx.NewId() for _init_ctrls in range(3)]
class ImageViewer(wx.MiniFrame):
def _init_ctrls(self, prnt):
# generated method, don't edit
wx.MiniFrame.__init__(self, id=wxID_IMAGEVIEWER, name='ImageViewer',
parent=prnt, pos=wx.Point(401, 286), size=wx.Size(127, 131),
style=wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP,
title='Image viewer')
self.SetClientSize(wx.Size(119, 104))
self.sashWindow1 = wx.SashWindow(id=wxID_IMAGEVIEWERSASHWINDOW1,
name='sashWindow1', parent=self, pos=wx.Point(0, 0),
size=wx.Size(119, 104),
style=wx.SW_BORDER | wx.THICK_FRAME | wx.SW_3D)
self.sashWindow1.SetExtraBorderSize(self.borderSize)
self.sashWindow1.SetMinimumSizeX(24)
self.sashWindow1.SetMinimumSizeY(24)
self.sashWindow1.Bind(wx.EVT_SIZE, self.OnSashwindow1Size)
self.staticBitmap1 = wx.StaticBitmap(bitmap=wx.NullBitmap,
id=wxID_IMAGEVIEWERSTATICBITMAP1, name='staticBitmap1',
parent=self.sashWindow1, pos=wx.Point(9, 9), size=wx.Size(101,
86), style=0)
def __init__(self, parent, doubleClickCallback=None):
self.borderSize = 30
self._init_ctrls(parent)
self.Centre(wx.BOTH)
if doubleClickCallback:
self.staticBitmap1.Bind(wx.EVT_LEFT_DCLICK, doubleClickCallback)
def showImage(self, filename, node = None):
if node is not None:
fn = tempfile.mktemp(os.path.splitext(node.name)[-1])
open(fn, 'wb').write(node.load())
else:
fn = filename
self.SetTitle('Image Viewer - %s' %(os.path.basename(fn)))
try:
ext = os.path.splitext(fn)[-1].lower()
bmp = wx.Image(fn, imgs[ext]).ConvertToBitmap()
except KeyError:
wx.LogError('Unsupported extension: %s'%ext)
return
self.sashWindow1.SetClientSize(wx.Size(bmp.GetWidth()+self.borderSize*2,
bmp.GetHeight()+self.borderSize*2))
self.SetClientSize(self.sashWindow1.GetSize())
self.staticBitmap1.SetBitmap(bmp)
if node is not None:
os.remove(fn)
self.Centre(wx.BOTH)
self.Show(True)
def OnSashwindow1Size(self, event):
self.sashWindow1.Refresh()
#self.staticBitmap1.Refresh()
event.Skip()
if __name__ == '__main__':
app = wx.PySimpleApp()
wx.InitAllImageHandlers()
frame = create(None)
frame.Show(True)
frame.showImage('../Images/Modules/wx.Frame.png')
app.MainLoop()
|