Вопрос

Я использую некоторые классы wx.ListCtrl в режиме wx.LC_REPORT, дополненном ListCtrlAutoWidthMixin.

Проблема в том, что:Когда пользователь дважды щелкает разделитель столбцов (для автоматического изменения размера столбца), ширина столбца устанавливается в соответствии с шириной содержимого.Это делается библиотекой wx и изменяет размер столбца всего на несколько пикселей, когда элемент управления пуст.

Я пытался дозвониться

самость.SetColumnWidth(номер столбца, wx.LIST_AUTOSIZE_USEHEADER)

при создании списка, но он просто устанавливает начальную ширину столбца, а не минимально допустимую ширину.

Кому-нибудь удалось установить минимальную ширину столбца?

Редактировать:Пытался поймать

 wx.EVT_LEFT_DCLICK 

безуспешно.Это событие не генерируется, когда пользователь дважды щелкает разделитель столбцов.Также пробовал с

wx.EVT_LIST_COL_END_DRAG 

это событие генерируется, обычно дважды, для двойного щелчка, но я не вижу, как я могу получить информацию о новом размере или как отличить двойной щелчок от перетаскивания.У кого-нибудь есть еще какие-нибудь идеи?

Это было полезно?

Решение 2

Хорошо, после некоторой борьбы я нашел рабочее решение для этого.Это некрасиво с точки зрения дизайна, но для меня работает достаточно хорошо.

Вот как это работает:

  1. Сохраните начальную ширину столбца.

    self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER)
    
    self.__columnWidth[colNum] = self.GetColumnWidth(c)
    
  2. Зарегистрируйте обработчик для события обновления пользовательского интерфейса.

    wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
    
  3. И напишите функцию-обработчик.

    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 Объектный список.Существует небольшая кривая обучения, но есть много примеров. Это было бы интересно ответить на ваш вопрос.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top