Issue
I created an wx application with 1 Frame. The Frame will have menubar, which has open menu option.
When open is clicked, a Wx.grid.Grid must be created in the frame with given rows, columns.
I have been trying hard, but scrollbars are not appearing by default.
I referred to this: https://stackoverflow.com/a/54753248/11658861
Scroll bars are not present which ideally must come automatically.
Post minimize and maximize Look
If I minimize and maximize frame once, then scrollbars are appearing!
Kindly someone please help! I need a solution, which creates proper grid with scrollbars, in same application flow.
Windows V20H2, Python 3.10.7, WxPython 4.2.0
Code (feel free to copy paste this into a Python IDE and test!):
import wx
import wx.grid
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title="A Simple Grid")
menubar = wx.MenuBar()
file_menu = wx.Menu()
menubar.Append(file_menu, "File")
open_item = wx.MenuItem(file_menu, wx.ID_OPEN, '&Open\tCtrl+O')
file_menu.Append(open_item)
self.Bind(wx.EVT_MENU, self.callForm2, open_item)
self.SetMenuBar(menubar)
self.Maximize()
def callForm2(self, event):
panel = wx.Panel(self)
myGrid = MyGrid(panel)
myGrid.fillGrid()
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(myGrid, 1, wx.EXPAND)
panel.SetSizerAndFit(sizer)
class MyGrid(wx.grid.Grid):
def __init__(self, parent):
wx.grid.Grid.__init__(self, parent, style=wx.HSCROLL | wx.VSCROLL)
def fillGrid(self):
self.CreateGrid(100, 5)
self.SetColLabelValue(0, "Column1")
self.SetColLabelValue(1, "Column2")
self.SetColLabelValue(2, "Column3")
self.SetColLabelValue(3, "Column4")
self.SetColLabelValue(4, "Column5")
self.SetDefaultColSize(width=350, resizeExistingCols=True)
self.SetDefaultRowSize(height=30, resizeExistingRows=True)
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm().Show()
app.MainLoop()
Summary
How to properly create a wx.grid.Grid with scrollbars in parent window, when an action is triggered from a child window?
Thanks in advance!
You'll need to use
Layout()andRefresh(), at least on Linux, after you have set the sizer.Note that the scrollbars will only show if needed, so I've added a 6th column, so the horizontal scrollbar shows too.