Reputation: 31
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()
Upvotes: 0
Views: 97
Reputation: 6206
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.
Upvotes: 1