Как установить и сохранить минимальную ширину? - PullRequest
4 голосов
/ 18 декабря 2008

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

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

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

self.SetColumnWidth (colNumber, wx.LIST_AUTOSIZE_USEHEADER)

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

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

РЕДАКТИРОВАТЬ: Попытка ловли

 wx.EVT_LEFT_DCLICK 

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

wx.EVT_LIST_COL_END_DRAG 

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

Ответы [ 2 ]

3 голосов
/ 19 декабря 2008

Честно говоря, я перестал использовать собственный wx.ListCtrl в пользу использования ObjectListView . Есть немного кривой обучения, но есть много примеров. Этот будет интересен для вашего вопроса.

1 голос
/ 19 декабря 2008

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

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

  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()
    

self.GetColumnCount () - 1 является преднамеренным, поэтому размер последнего столбца не изменяется. Я знаю, что это не элегантное решение, но оно работает достаточно хорошо для меня - вы не можете сделать столбцы слишком маленькими, дважды щелкнув по разделителям (на самом деле - вы не можете сделать это вообще) и дважды щелкнув по разделителю после последний столбец изменяет размер последнего столбца, чтобы соответствовать ширине элемента управления списком.

Тем не менее, если кто-нибудь знает лучшее решение, пожалуйста, опубликуйте его.

...