2015-07-21 89 views
0

我想在wxPython中顯示圖像的網格。我使用的是GridSizer創建一個網格,這是我加我staticbitmaps。但出於某種原因,我只能在網格中的第一個位置看到一個圖像。我不知道我哪裏出錯了。這是我的代碼和相應的輸出。在wxPython中顯示圖像的網格

import wx 
import sys 
import glob 

MAIN_PANEL = wx.NewId() 


class CommunicationApp(wx.App): 
    """This is the class for the communication tool application. 
    """ 

    def __init__(self, config=None, redirect=False): 
     """Instantiates an application. 
     """ 
     wx.App.__init__(self, redirect=redirect) 
     self.cfg = config 
     self.mainframe = CommunicationFrame(config=config, 
              redirect=redirect) 
     self.mainframe.Show() 

    def OnInit(self): 
     # self.SetTopWindow(self.mainframe) 
     return True 


class CommunicationFrame(wx.Frame): 
    """Frame of the Communication Application. 
    """ 

    def __init__(self, config, redirect=False): 
     """Initialize the frame. 
     """ 
     wx.Frame.__init__(self, parent=None, 
          title="CMC Communication Tool", 
          style=wx.DEFAULT_FRAME_STYLE) 
     self.imgs = glob.glob('../img/img*.png') 
     self.panel = CommuniationPanel(parent=self, 
             pid=MAIN_PANEL, 
             config=config) 
     # # Gridbagsizer. 
     nrows, ncols = 3, 4 
     self.grid = wx.GridSizer(rows=nrows, cols=ncols) 
     # Add images to the grid. 
     for r in xrange(nrows): 
      for c in xrange(ncols): 
       _n = ncols * r + c 
       _tmp = wx.Image(self.imgs[_n], 
           wx.BITMAP_TYPE_ANY) 
       _temp = wx.StaticBitmap(self.panel, wx.ID_ANY, 
             wx.BitmapFromImage(_tmp)) 
       self.grid.Add(_temp, 0, wx.EXPAND) 

     self.grid.Fit(self) 

     # set to full screen. 
     # self.ShowFullScreen(not self.IsFullScreen(), 0) 


class CommuniationPanel(wx.Panel): 
    """Panel of the Communication application frame. 
    """ 

    def __init__(self, parent, pid, config): 
     """Initialize the panel. 
     """ 
     wx.Panel.__init__(self, parent=parent, id=pid) 

     # CALLBACK BINDINGS 
     # Bind keyboard events. 
     self.Bind(wx.EVT_KEY_UP, self.on_key_up) 

    def on_key_up(self, evt): 
     """Handles Key UP events. 
     """ 
     code = evt.GetKeyCode() 
     print code, wx.WXK_ESCAPE 
     if code == wx.WXK_ESCAPE: 
      sys.exit(0) 


def main(): 
    app = CommunicationApp() 
    app.MainLoop() 


if __name__ == '__main__': 
    main() 

這裏是輸出。 enter image description here

我想看到(或預期看到的)是3X4不同圖像的網格。

我的代碼有什麼問題?我該如何解決它?

+1

我還沒有試過運行的代碼,但也許你忘了打電話'SetSizer '? 'self.panel.SetSizer(self.grid)' – GP89

+0

@ GP89我知道這很簡單但很關鍵,我錯過了。有效!感謝您的幫助。 – siva82kb

+0

沒問題。我將發佈它作爲答案,以防將來幫助其他人 – GP89

回答

2

你似乎忘記設置分級機爲您的面板

嘗試把這個在框架的__init__

self.panel.SetSizer(self.grid)