前提・実現したいこと
Python で画像表示をして 拡大縮小をしようとしています。
wxPython をつかって PIL でサイズを変更したものを
表示しようとしたのですが,読み込んだものが表示されたあと
サイズの変更をしようとすると,画像が重なったり表示されなかったりします。
おそらく,描画領域の初期化やサイズの変更がうまくいっていないものと
予想しています。
目的が達成されれば,十分なのでこの方法にこだわりません。
(メニューからファイルを選んで,表示,その後↑↓ で拡大縮小をさせる。
画像は必要に応じて拡大縮小させ,クリック時に画像上の座標を取るのが目的)
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージはほぼありません。
(いろいろ試しているときに,出てくるものはそのつど解決しています。)
エラーメッセージ
該当のソースコード
Python
# _*_ coding: shift_jis _*_ import wx import os from PIL import Image #import pdb STSIZE=(500,300) class MyApp(wx.App): def OnInit(self): self.setScw(STSIZE) self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown) self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) self.imageLoad=False self.menu_bar = wx.MenuBar() self.menu_file = wx.Menu() # メニューアイテムを作る self.item_file_1 = wx.MenuItem(self.menu_file, 1, u'画像読み込み') self.item_file_2 = wx.MenuItem(self.menu_file, 2, u'終了') self.menu_file.Append(self.item_file_1) self.menu_file.Append(self.item_file_2) self.menu_bar.Append(self.menu_file, u'ファイル') self.frm.Bind(wx.EVT_MENU, self.menu_event) self.frm.SetMenuBar(self.menu_bar) self.frm.Show() return 1 def setScw(self,size): #pdb.set_trace() self.frm = wx.Frame(None, -1, "wx.Python", size) self.scWin = wx.ScrolledWindow(self.frm, -1) self.scWin.SetScrollbars(1, 1, size[0],size[1]) def menu_event(self, event): """ メニュー項目選択イベント """ menu_id = event.GetId() if menu_id == 1: self.OnOpen(); elif menu_id == 2: exit() def OnOpen(self): """ ファイルを開く """ self.dirname = '' dlg = wx.FileDialog(self.frm, "ファイルを選択してください", self.dirname, "", "*.*", wx.FD_OPEN ) if dlg.ShowModal() == wx.ID_OK: self.filename = dlg.GetFilename() self.dirname = dlg.GetDirectory() self.imgSize=list(STSIZE) self.img=Image.open(os.path.join(self.dirname, self.filename)); self.imageLoad=True tmpImg=self.img tmpImg.thumbnail(STSIZE, Image.ANTIALIAS) image1 = wx.Image(tmpImg.size[0],tmpImg.size[1]) image1.SetData(tmpImg.convert('RGB').tobytes()) #self.frm.SetSize(tmpImg.size) #self.scWin = wx.ScrolledWindow(self.frm, -1) #self.setScw(tmpImg.size) self.ItemSize = wx.StaticBitmap(self.scWin, -1, image1.ConvertToBitmap(), (0,0)) self.frm.Show() def OnMouseLeftDown(self, e): """ 左ボタンを押した時の処理 """ if self.imageLoad==True: pos = e.GetPosition() print (pos) def onKeyDown(self,evt): keycode = evt.GetKeyCode() if keycode==317: self.imgSize[0]=(self.imgSize[0]*10+5)//11 self.imgSize[1]=(self.imgSize[1]*10+5)//11 elif keycode==315: self.imgSize[0]=(self.imgSize[0]*11+5)//10 self.imgSize[1]=(self.imgSize[1]*11+5)//10 else: return None print (self.imgSize) tmpImg=self.img tmpImg.thumbnail(self.imgSize, Image.ANTIALIAS) image1 = wx.Image(tmpImg.size[0],tmpImg.size[1]) image1.SetData(tmpImg.convert('RGB').tobytes()) #self.scWin = wx.ScrolledWindow(self.frm, -1) self.setScw(tmpImg.size) self.ItemSize = wx.StaticBitmap(self.scWin, -1, image1.ConvertToBitmap(), (0,0)) app = MyApp() app.MainLoop()
試したこと
試行錯誤で,いろいろやっていますが,現在の状態は書き直したものは
まったく表示されていません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/12 03:14