画像表示サンプル
ハードディスク発掘していたら微妙なコードが出てきたので書き直してメモ
#!/usr/bin/python # -*- coding: utf-8 -*- import wx import os class ImagePanel(wx.Panel): def __init__(self, parent): super(ImagePanel, self).__init__(parent) self.bmp=None self.Bind(wx.EVT_PAINT, self.OnPaint) def OnPaint(self, event): if self.bmp: dc = wx.PaintDC(self) dc.DrawBitmap(self.bmp, 0, 0, True) else: dc = wx.PaintDC(self) dc.DrawText("open a image file", 0, 0) def load(self, path): if not os.path.exists(path): print 'no such file: %s' return False wximage=wx.Image(path) self.bmp = wximage.ConvertToBitmap() self.Refresh() return True class MyFrame(wx.Frame): def __init__(self, parent, ID, title): super(MyFrame, self).__init__(parent, ID, title, size=wx.Size(200, 150)) # sizer sizer=wx.BoxSizer(wx.VERTICAL) self.SetSizer(sizer) self.SetAutoLayout(True) # interface tb=self.setupToolbar() sizer.Add(tb, 0, wx.EXPAND) self.setupMenu() self.CreateStatusBar() # image self.panel=ImagePanel(self) sizer.Add(self.panel, 1, wx.EXPAND) # event handler self.Bind(wx.EVT_MENU, lambda e: self.fileOpen(), id=wx.ID_OPEN) self.Bind(wx.EVT_MENU, lambda e: self.Close(), id=wx.ID_EXIT) def setupMenu(self): menuBar = wx.MenuBar() menuBar.Append(self.setupFileMenu(), '&File') self.SetMenuBar(menuBar) def setupFileMenu(self): menu = wx.Menu() # open menu.Append(wx.ID_OPEN, '&Open', 'Open a image file') # separator menu.AppendSeparator() # exit menu.Append(wx.ID_EXIT, 'E&xit', 'Terminate the program') return menu def setupToolbar(self): tsize = (24,24) tb = wx.ToolBar(self, style=wx.TB_HORIZONTAL) tb.SetToolBitmapSize(tsize) # open tb.AddLabelTool(wx.ID_OPEN, '&Open', wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, tsize), shortHelp='Open a image file', longHelp='Open a image file') tb.Realize() return tb def fileOpen(self): dialog = wx.FileDialog(self, "Choose a image file", "", "", "|".join([ "ALL files (*.*)|*.*", "JPEG files (*.jpg)|*.jpg", "GIF files (*.gif)|*.gif", "BMP files (*.bmp)|*.bmp", "PNG files (*.png)|*.png", ] ) , wx.OPEN) try: if dialog.ShowModal() == wx.ID_OK: path=dialog.GetPath() if self.panel.load(path): print 'open %s' % path self.SetTitle(path) finally: dialog.Destroy() class MyApp(wx.App): def OnInit(self): frame = MyFrame(None, -1, "Image viewer") frame.Show(True) self.SetTopWindow(frame) return True if __name__=="__main__": app = MyApp(0) app.MainLoop()