Como definir e preservar a largura mínima?
Pergunta
Eu uso algumas classes wx.ListCtrl no modo wx.LC_REPORT, aumentada com ListCtrlAutoWidthMixin.
O problema é: quando o usuário clica duas vezes o divisor de coluna (a coluna de auto redimensionamento), largura da coluna é definida para coincidir com a largura do conteúdo. Isso é feito pela biblioteca wx e redimensiona coluna para apenas alguns pixels quando o controle está vazia.
Eu tentei ligar
self.SetColumnWidth (colNumber, wx.LIST_AUTOSIZE_USEHEADER)
ao criar a lista, mas apenas define a largura da coluna inicial, não a largura mínima permitida.
Qualquer um sucesso com a criação coluna largura mínima?
EDIT: Tentei pegar
wx.EVT_LEFT_DCLICK
sem sucesso. Este evento não é gerado quando o usuário clica duas vezes coluna divisória. Também tentei com
wx.EVT_LIST_COL_END_DRAG
este evento é gerado, geralmente duas vezes, por duplo clique, mas não vejo como posso obter informações sobre o novo tamanho, ou como diferenciar duplo clique de arrastar e soltar. Alguém tem algumas outras idéias?
Solução 2
Ok, depois de alguma luta eu fui solução trabalhando para isso. É feio do ponto de vista do design, mas funciona bem o suficiente para mim.
É assim que funciona:
-
Guarde a largura inicial da coluna.
self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER) self.__columnWidth[colNum] = self.GetColumnWidth(c)
-
Register manipulador para evento de atualização da interface do usuário.
wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
-
E escrever a função de manipulador.
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()
O self.GetColumnCount () - 1 é intencional, assim que a última coluna não é redimensionada. Eu sei que isto não é uma solução elegante, mas funciona bem o suficiente para mim - você não pode fazer colunas muito pequenas clicando duas vezes sobre divisores (na verdade - você não pode fazê-lo em tudo) e duplo clique sobre o divisor depois última coluna redimensiona a última coluna para a largura controle de lista de ajuste.
Ainda assim, se alguém sabe melhor solução por favor poste.
Outras dicas
Honestamente, eu parei de usar o wx.ListCtrl nativa em favor do uso ObjectListView . Há um pouco de uma curva de aprendizado, mas há muitos exemplos. Este seria de interesse para a sua pergunta.