Подход в двух других ответах - создать тип данных, связать редактор с типом данных, а затем связать тип данных со столбцом.Отсоединение редактора от номера столбца является хорошей идеей, если у вас есть несколько столбцов с одинаковым типом данных, и поэтому эти решения, вероятно, являются лучшим универсальным подходом.
Но я хотел более простой подход, который связывает редактор с определенным столбцом, потому что в моем приложении каждый столбец имеет другой тип данных.Совместное использование типа данных через столбцы не имеет смысла.Так что этот ответ ближе к исходному вопросу.
Все это вращается вокруг смущенно названного класса wx.grid.GridCellAttr
.Вы могли бы быть прощены за то, что предположили, что элемент name Attr
по существу означает выравнивание и цвет, потому что это то, что он означает, например, wx.TextAttr
.И наиболее четко задокументированным конструктором этого класса является GridCellAttr(colText, colBack, font, hAlign, vAlign)
, который снова предполагает, что Attr
касается выравнивания и цвета.
Но класс wx.grid.GridCellAttr
на самом деле является очень общим классом дескриптора свойств ячеек с более чем 30методы для установки и получения выравнивания и цвета, как ожидается, но также (среди прочего) размер, режим чтения / записи, рендерер и редактор .
Таким образом, способ установить редактордля столбца сетки это
my_col_property_settings = wx.grid.GridCellAttr()
my_col_property_settings.SetEditor(MyColumnSpecificEditor())
my_col_property_settings.SetAlignment(hAlign=wx.ALIGN_CENTRE, vAlign=wx.ALIGN_CENTRE)
# ... etc ...
self.mygrid.SetColAttr(1, my_col_property_settings)
Но если вы хотите установить один и тот же редактор для двух столбцов, не вызывайте SetColAttr()
с тем же экземпляром GridCellAttr
, потому что вы получите счетчик ссылокошибки при закрытии программы, если вы делаете.Вместо этого сделайте
self.mygrid.SetColAttr(1, my_col_property_settings.Clone())
self.mygrid.SetColAttr(2, my_col_property_settings.Clone())