2012-02-10 50 views
0

我已經在wxPython中編寫了一個基本的應用程序。雖然在Windows下工作正常,但在Linux(Ubuntu 11.10)下,該框架將顯示爲空(除了左側的幾個小破碎元素)。控制檯中沒有錯誤。在運行之前,我按照http://wiki.wxpython.org/InstallingOnUbuntuOrDebianwxPython - 在Ubuntu中的空白框架

安裝了wxPython。

class MainWindow(wx.Frame): 
def __init__(self, parent, title): 
    self.dirname='' 

    # A "-1" in the size parameter instructs wxWidgets to use the default size. 
    wx.Frame.__init__(self, parent, title=title, size=(400,500),style=wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX)) 
    self.CreateStatusBar() # A Statusbar in the bottom of the window 
    panel = wx.Panel(self, wx.ID_ANY) 

    # Setting up the menus 
    filemenu = wx.Menu() 
    editmenu = wx.Menu() 

    menuOpen = filemenu.Append(wx.ID_OPEN, "&Open"," Open an underway netCDF to load") 
    menuAbout= filemenu.Append(wx.ID_ABOUT, "&About"," Information about this program") 
    menuExit = filemenu.Append(wx.ID_EXIT,"E&xit"," Terminate the program") 
    menuConfig = editmenu.Append(wx.ID_EDIT, "&Config", "Edit Configuration") 

    # Creating the menubar. 
    menuBar = wx.MenuBar() 
    menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar 
    menuBar.Append(editmenu,"&Edit") 
    self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content. 

    #Sizer setup. 
    sizer = wx.BoxSizer(wx.VERTICAL) #root sizer 
    buttonSizer = wx.BoxSizer(wx.HORIZONTAL) 

    #Buttons. 
    self.buttonLoadData = wx.Button(panel, -1, "&Load Data") 
    self.buttonAbort = wx.Button(panel, -1, "&Abort Load") 
    self.buttonAbort.Enabled = False 
    self.buttonLoadData.Enabled = False 

    #Slider. Should probably be a floating point spin control. 
    #self.sliderRate = wx.Slider(panel, -1, 5, 0, 100, wx.DefaultPosition, (380, -1), wx.SL_AUTOTICKS | wx.SL_LABELS) 
    self.sliderRate = self.FloatSlider(panel, -1, 1000, 0, 5000, wx.DefaultPosition, (380, -1), wx.SL_AUTOTICKS | wx.SL_LABELS) 

    #Log window. 
    self.log = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_READONLY) 


    # Events. 
    self.Bind(wx.EVT_MENU, self.OnOpen, menuOpen) 
    self.Bind(wx.EVT_MENU, self.OnExit, menuExit) 
    self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout) 
    self.Bind(wx.EVT_MENU, self.OnConfig, menuConfig) 
    self.Bind(wx.EVT_BUTTON, self.OnLoadButton, self.buttonLoadData) 
    self.Bind(wx.EVT_BUTTON, self.OnAbortButton, self.buttonAbort) 
    self.Bind(wx.EVT_SLIDER, self.OnSlider) 

    #Subscribe to messages from underlying simulator 
    Publisher().subscribe(self.updateDisplay, "update") 

    #Layout sizers 
    buttonSizer.Add(self.buttonLoadData, 0, wx.ALL, 5) 
    buttonSizer.Add(self.buttonAbort, 0, wx.ALL, 5) 
    sizer.Add(buttonSizer, 0, wx.ALL, 5) 
    sizer.Add(self.sliderRate, 0, wx.ALL, 5) 
    sizer.Add(self.log, 1, wx.EXPAND, 5) 

    panel.SetSizer(sizer) 
    panel.Layout() 

回答

0

您可能忘記在SetSizerLayout之間做出一定的wxPython正確地計算佈局添加sizer.Fit(panel)。我不知道爲什麼它的工作在Windows,但在Linux上我沒能正確地做出wxPython顯示幀無Fit

panel.SetSizer(sizer) 
    sizer.Fit(panel) 
    panel.Layout() 

這應該這樣做。

+0

這就是票,謝謝。 – Caligari 2012-02-14 01:37:01