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?

Foi útil?

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:

  1. Guarde a largura inicial da coluna.

    self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER)
    
    self.__columnWidth[colNum] = self.GetColumnWidth(c)
    
  2. Register manipulador para evento de atualização da interface do usuário.

    wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
    
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top