I have a wx 2.8 (Python 2.7) basic GUI that switches panels when the next button is pressed. When the GUI is opened, it is maximized. For some reason though, on Windows 7/10, the whole window resizes to the minimum size but on Ubuntu 14.04, it doesn't. Can someone please tell me what I'm doing wrong here? I don't want the window to resize, I want it to stay Maximized. The whole code is below:
#!/usr/bin/env python
import wx
class MainWindow(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Test")
self.SetMinSize((1000, 700))
self.Maximize(True)
self.panel_one = Panel_One(self)
self.panel_two = Panel_Two(self)
self.panel_three = Panel_Three(self)
self.panel_two.Hide()
self.panel_three.Hide()
self.PanelSizer = wx.BoxSizer(wx.VERTICAL)
self.PanelSizer.Add(self.panel_one, 1, wx.CENTER|wx.EXPAND|wx.ALL)
self.PanelSizer.Add(self.panel_two, 1, wx.CENTER|wx.EXPAND|wx.ALL)
self.PanelSizer.Add(self.panel_three, 1, wx.CENTER|wx.EXPAND|wx.ALL)
self.SetSizer(self.PanelSizer)
self.Center()
def ShowPanelTwo(self, event):
self.panel_one.Hide()
self.panel_two.Show()
self.panel_two.TopSizer.Fit(self)
def ShowPanelThree(self, event):
self.panel_two.Hide()
self.panel_three.Show()
self.panel_three.TopSizer.Fit(self)
class Panel_One(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.parent = parent
self.list = wx.ListCtrl(self, wx.ID_ANY, style = wx.LC_REPORT | wx.BORDER_SUNKEN)
self.list.InsertColumn(0, 'List 1')
self.nextbutton = wx.Button(self, wx.ID_ANY, label="Next", size=(80,-1))
self.nextbutton.Bind(wx.EVT_BUTTON, self.parent.ShowPanelTwo)
self.VSizer = wx.BoxSizer(wx.VERTICAL)
self.HSizer = wx.BoxSizer(wx.HORIZONTAL)
self.TopSizer = wx.BoxSizer(wx.VERTICAL)
self.VSizer.Add(self.list, 1, wx.ALIGN_CENTER|wx.EXPAND, 5)
self.HSizer.Add(self.VSizer, 1, wx.ALIGN_CENTER|wx.EXPAND, 5)
self.TopSizer.Add(self.HSizer, 1, wx.ALIGN_CENTER|wx.EXPAND, 5)
self.TopSizer.Add(self.nextbutton, 0, wx.EXPAND, 5)
self.SetSizer(self.TopSizer)
class Panel_Two(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.parent = parent
self.list = wx.ListCtrl(self, wx.ID_ANY, style = wx.LC_REPORT | wx.BORDER_SUNKEN)
self.list.InsertColumn(0, 'List 2')
self.nextbutton = wx.Button(self, wx.ID_ANY, label="Next", size=(80,-1))
self.nextbutton.Bind(wx.EVT_BUTTON, self.parent.ShowPanelThree)
self.VSizer = wx.BoxSizer(wx.VERTICAL)
self.HSizer = wx.BoxSizer(wx.HORIZONTAL)
self.TopSizer = wx.BoxSizer(wx.VERTICAL)
self.VSizer.Add(self.list, 1, wx.ALIGN_CENTER|wx.EXPAND, 5)
self.HSizer.Add(self.VSizer, 1, wx.ALIGN_CENTER|wx.EXPAND, 5)
self.TopSizer.Add(self.HSizer, 1, wx.ALIGN_CENTER|wx.EXPAND, 5)
self.TopSizer.Add(self.nextbutton, 0, wx.EXPAND, 5)
self.SetSizer(self.TopSizer)
class Panel_Three(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.parent = parent
self.list = wx.ListCtrl(self, wx.ID_ANY, style = wx.LC_REPORT | wx.BORDER_SUNKEN)
self.list.InsertColumn(0, 'List 3')
self.VSizer = wx.BoxSizer(wx.VERTICAL)
self.HSizer = wx.BoxSizer(wx.HORIZONTAL)
self.TopSizer = wx.BoxSizer(wx.VERTICAL)
self.VSizer.Add(self.list, 1, wx.ALIGN_CENTER|wx.EXPAND, 5)
self.HSizer.Add(self.VSizer, 1, wx.ALIGN_CENTER|wx.EXPAND, 5)
self.TopSizer.Add(self.HSizer, 1, wx.ALIGN_CENTER|wx.EXPAND, 5)
self.SetSizer(self.TopSizer)
if __name__ == '__main__':
app = wx.App(False)
frame = MainWindow()
frame.Show()
app.MainLoop()
Try replacing the self.whatever.TopSizer.Fit(self)
lines with just self.Layout()
. You don't want to change the size of anything, which Fit
does, you just want the contents of the panels to be laid out according to the sizer's layout algorithm.