2017-03-20 16 views
0

パネルの背景画像を表示する際にwxpythonに問題があります。 win10サーフェイスプロで、サイズ800x600のwx.frameを宣言しました。 フレームで、私は最初に同じサイズの背景パネルを宣言しました。 私はそのstaticbitmapを同じサイズのビットマップで埋めました。wx.panelに背景ビットマップが表示されない

次に、私は中央の底にサイズ320x320の小さなパネルを宣言しました。 私はまた、そのstaticbitmapを320x320のビットマップで埋めました。

しかし、どうにかして、最初の背景パネルは常にstaticbitmapに入れた画像なしで背景色(240,240,240,255)です。 しかし、小さなパネルの画像は常に正しく表示されました。

コードは次のとおりです。

class backgroundPanel(wx.Panel): 
    def __init__(self, *args, **kw): 
     x = 0 
     y = 0 
     w = 800 
     h = 600 
     kw.update({'pos':wx.Position(x, y), 'size':wx.Size(w, h)}) 
     super(backgroundPanel, self).__init__(*args, **kw) 
     self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) 

     currentBitmap = util.queryGuiFrame().canvasBackgroundBitmap 
     self.staticBitmap = wx.StaticBitmap(self, wx.ID_ANY, currentBitmap) 
     self.Enable() 
     self.Refresh() 
     return 





class actioner(wx.Panel): 
    def __init__(self, *args, **kw): 
     x = 240 
     y = 360 
     w = 320 
     h = 320 
     newCanvasState = kw.pop('newCanvasState', None) 
     print("New actioner from state: ", canvasState, " to :", newCanvasState) 
     kw.update({'pos':wx.Position(x, y), 'size':wx.Size(w, h)}) 
     super(actioner, self).__init__(*args, **kw) 
     self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) 
     self.currentBitmap = util.queryGuiFrame().testerSittingBitmap 

     if newCanvasState == None: 
      #draw the initial actioner 
      currentBitmap = util.queryGuiFrame().testerSittingBitmap 
     elif newCanvasState == 'standbyFirst' \ 
     or newCanvasState == 'standby' \ 
     or newCanvasState == 'clockwise1' \ 
     or newCanvasState == 'clockwise2' \ 
     or newCanvasState == 'counterClockwise1' \ 
     or newCanvasState == 'counterClockwise2': 
      print("drawing actioner standby at (", util.queryGuiFrame().actionerPanelX, ",", 
       util.queryGuiFrame().actionerPanelY, ")") 
      currentBitmap = util.queryGuiFrame().testerCuteBitmap 

     self.staticBitmap = wx.StaticBitmap(self, wx.ID_ANY, currentBitmap) 
     self.Enable(False) 
     self.Refresh() 
     return 

私はwxpythonが私から隠していることを何の手がかりもなく1日間これに取り組んできました。 2つのパネルのプロパティを確認しても違いは見られませんでした。 私はまた、宣言の順序で2つのパネルを切り替えようとしました。
同じことですが、その小さなパネルは大きなベージュの背景パネルによって隠されているだけです。

また、背景パネルのビットマップをフレームのstaticbitmapに配置しようとしました。結果はすべて同じ(240,240,240,255)のピクセルのパネルです。

また、IDEがwxpythonとは異なる前提と解釈をするのは面倒です。 私はpyscriptorを使いましたが、問題は少ないようでした。 特に、ウィンドウ全体の境界を宣言する必要があります。
しかし、pyscriptorは子スレッドでブレークポイントを受け入れません。 私はPyDevに切り替えました。 しかし、それはウィンドウ境界全体を違って解釈し、レイアウトが間違って見えます。
私はクライアントがアプリケーションを実行するときに私が見るものを確信していません。

ご意見をお寄せください。

答えて

1

ご協力いただきありがとうございます。 問題は解決されました。 これで背景パネルを削除し、フレームの背景に直接描画しました。 背景パネルは無関係です。

この問題は2つの問題が原因です。 まず、ダブルバッファが必要です。 staticBitmapを私のcanvasbitmapから直接作成すると、フレームの背景はまだ空です。

第2に、フレームのインスタンス化後にフレームの他のパネルを動的に宣言しようとしていました。それも問題を引き起こしているようだ。 フレームのインスタンス化ですべてのパネルをインスタンス化しました。
その後、問題は一日のうちに消えた。

しかし、この種のルールは時には非常にイライラして、初心者には疲れることがあります。

関連する問題