Pregunta

utilizo algunas clases wx.ListCtrl en modo wx.LC_REPORT, aumentada con ListCtrlAutoWidthMixin.

El problema es: cuando el usuario hace doble clic el separador de columna (a la columna de cambio de tamaño automático), anchura de la columna se establece para que coincida con la anchura del contenido. Esto se hace mediante la biblioteca wx y cambia el tamaño de la columna a solo unos pocos píxeles cuando el control está vacía.

He intentado llamar

  

self.SetColumnWidth (ColNumber, wx.LIST_AUTOSIZE_USEHEADER)

durante la creación de la lista, pero que sólo establece el ancho de la columna inicial, no el ancho mínimo permitido.

Cualquiera que sucedió con el establecimiento de la columna anchura mínima?

EDIT: Probado captura

 wx.EVT_LEFT_DCLICK 

sin éxito. Este evento no se genera cuando el usuario hace doble clic columna divisor. También probamos con

wx.EVT_LIST_COL_END_DRAG 

Se genera este evento, por lo general dos veces, por el doble clic, pero no veo cómo puedo recuperar la información sobre el nuevo tamaño o la forma de diferenciar doble clic desde arrastrar y soltar. Cualquier persona tiene algunas otras ideas?

¿Fue útil?

Solución 2

Ok, después de una lucha Me solución de trabajo para eso. Es feo desde el punto de vista del diseño, pero funciona bastante bien para mí.

Así es como funciona:

  1. Almacenar la anchura inicial de la columna.

    self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER)
    
    self.__columnWidth[colNum] = self.GetColumnWidth(c)
    
  2. Registrar controlador para el evento de actualización de interfaz de usuario.

    wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
    
  3. Y escribir la función de controlador.

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

El self.GetColumnCount () - 1 es intencional, por lo que la última columna no cambia de tamaño. Sé que esto no es una solución elegante, pero funciona bastante bien para mí - no se puede hacer demasiado pequeñas columnas haciendo doble clic sobre divisores (de hecho - no se puede hacer nada en absoluto) y haciendo doble clic en el divisor después última columna cambia el tamaño de la última columna para adaptarse a la anchura control de lista.

Sin embargo, si alguien sabe mejor solución publicarlo.

Otros consejos

Sinceramente, he dejado de usar el wx.ListCtrl nativo en favor del uso de ObjectListView . Hay un poco de una curva de aprendizaje, pero hay un montón de ejemplos. Este sería de interés a su pregunta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top