Как установить и сохранить минимальную ширину?
Вопрос
Я использую некоторые классы wx.ListCtrl в режиме wx.LC_REPORT, дополненном ListCtrlAutoWidthMixin.
Проблема в том, что:Когда пользователь дважды щелкает разделитель столбцов (для автоматического изменения размера столбца), ширина столбца устанавливается в соответствии с шириной содержимого.Это делается библиотекой wx и изменяет размер столбца всего на несколько пикселей, когда элемент управления пуст.
Я пытался дозвониться
самость.SetColumnWidth(номер столбца, wx.LIST_AUTOSIZE_USEHEADER)
при создании списка, но он просто устанавливает начальную ширину столбца, а не минимально допустимую ширину.
Кому-нибудь удалось установить минимальную ширину столбца?
Редактировать:Пытался поймать
wx.EVT_LEFT_DCLICK
безуспешно.Это событие не генерируется, когда пользователь дважды щелкает разделитель столбцов.Также пробовал с
wx.EVT_LIST_COL_END_DRAG
это событие генерируется, обычно дважды, для двойного щелчка, но я не вижу, как я могу получить информацию о новом размере или как отличить двойной щелчок от перетаскивания.У кого-нибудь есть еще какие-нибудь идеи?
Решение 2
Хорошо, после некоторой борьбы я нашел рабочее решение для этого.Это некрасиво с точки зрения дизайна, но для меня работает достаточно хорошо.
Вот как это работает:
Сохраните начальную ширину столбца.
self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER) self.__columnWidth[colNum] = self.GetColumnWidth(c)
Зарегистрируйте обработчик для события обновления пользовательского интерфейса.
wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
И напишите функцию-обработчик.
def onUpdateUI(self, evt): for colNum in xrange(0, self.GetColumnCount()-1): if self.GetColumnWidth(colNum) < self.__columnWidth[colNum]: self.SetColumnWidth(colNum, self.__columnWidth[colNum]) evt.Skip()
В самость.GetColumnCount() - 1 является преднамеренным, поэтому размер последнего столбца не изменяется.Я знаю, что это не элегантное решение, но для меня оно работает достаточно хорошо - вы не можете сделать столбцы слишком маленькими, дважды щелкнув по разделителям (на самом деле - вы вообще не можете этого сделать) и дважды щелкнув по разделителю после последнего столбца, измените размер последнего столбца, чтобы он соответствовал ширине элемента управления списком.
Тем не менее, если кто-то знает лучшее решение, пожалуйста, опубликуйте его.
Другие советы
Честно говоря, я перестал использовать собственный wx.ListCtrl в пользу использования ObjectListView Объектный список.Существует небольшая кривая обучения, но есть много примеров. Это было бы интересно ответить на ваш вопрос.