Растяжение размера столбца ограничено шириной экрана. Я нашел, вроде, где этот размер находиться в событии
EVT_GRID_CMD_COL_SIZE: Пользователь изменил размер столбца в соответствии с wxEVT_GRID_COL_SIZE типом события,
с помощью event.EventObject.ClassInfo.Size
, но как изменить его или как поймать это событие в динамике, я не нашел. Поэтому просто возвращаю размер сильно растянутого столбца к нужному.
import wx
import wx.grid
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title="A Simple grid")
self.panel = wx.Panel(self)
self.grid = wx.grid.Grid(self.panel)
self.grid.CreateGrid(5, 2)
self.grid.SetColLabelValue(0, "IP")
self.grid.SetColLabelValue(1, "BANNER")
self.grid.AutoSizeColumns()
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.grid, 1, wx.EXPAND)
self.panel.SetSizer(self.sizer)
# Ловим событие пользователь изменил размер столбца
self.grid.Bind(wx.grid.EVT_GRID_CMD_COL_SIZE, self.col_size)
def col_size(self, event):
print(event.EventObject.ClassInfo.Size)
# Определяем в каком столбце произошло событие.
col = event.RowOrCol
# Находим ширину таблицы.
width_grid = self.grid.GetSize()[0]
# Возвращаем размер столбца до необходимого размера, я взял половину ширины таблицы.
self.grid.SetColSize(col, min(width_grid // 2, self.grid.GetColSize(col)))
# Возвращаем ячейку в видимую часть окна.
self.grid.MakeCellVisible(0, col)
event.Skip()
if __name__ == "__main__":
app = wx.App()
frame = MyForm().Show()
app.MainLoop()