私のプログラムでは、イメージ (ビットマップ) を wxScrolledWindow にロードしています。画像の上にグリッドを描画しようとしていますが、うまくいきません。私の仕事は、このプログラムを最初に開発された Windows から移植し、Mac でも動作させることですが、予想以上に大変な作業です。
def OnPaint(self, event):
dc = wx.BufferedPaintDC(self.staticBitmap,self.staticBitmap.GetBitmap())
dc.Clear()
dc.DrawBitmap(self.wxBitmap, 0, 0)
self.drawGrid(dc)
event.Skip()
def drawGrid(self, dc):
gridWid, gridHgt = self.staticBitmap.GetBitmap().GetSize()
numRows, numCols = self.gridSize, self.gridSize
if self.controlPanel.showGridBox.IsChecked():
dc.SetPen(wx.Pen(self.gridColor, self.gridThickness))
dc.SetTextForeground(self.gridColor)
cellWid = float( gridWid - 1) / numRows
cellHgt = float( gridHgt - 1) / numCols
for rowNum in xrange( numRows + 1) :
dc.DrawLine( 0, rowNum*cellHgt, gridWid, rowNum*cellHgt )
for colNum in xrange( numCols + 1 ) :
dc.DrawLine( colNum*cellWid, 0, colNum*cellWid, gridHgt )
このコードは Windows 7 では問題なく動作しますが、Mac で実行すると次のエラーが発生します。
Traceback (most recent call last):
File "/Users/kyra/Documents/workspace/ADAPT/src/GUI.py", line 1617, in OnPaint
dc = wx.BufferedPaintDC(self.staticBitmap, self.staticBitmap.GetBitmap())
File "/usr/local/lib/wxPython-3.0.2.0/lib/python2.7/site-packages/wx-3.0-osx_cocoa/wx/_gdi.py", line 5290, in __init__
_gdi_.BufferedPaintDC_swiginit(self,_gdi_.new_BufferedPaintDC(*args, **kwargs))
wx._core.PyAssertionError: C++ assertion "window->MacGetCGContextRef() != NULL" failed at /BUILD/wxPython-src-3.0.2.0/src/osx/carbon/dcclient.cpp(195) in wxPaintDCImpl(): using wxPaintDC without being in a native paint event
self.staticBitmap は wxStaticBitmap であり、self.wxBitmap はまったく同じ画像です。私の推測では、おそらく GraphicsContext と関係があるのでしょうか? ここで同様の質問がありました: wxpython で PaintEvent を送信する方法ですが、これは役に立ちませんでした。彼らが self. Refresh() で提案したことをしましたが、同じエラーが発生しました。Windows では機能するのに、Mac では機能しないのはなぜですか? 画像に描画が行われていないようです。