Question

J'utilise certaines classes wx.ListCtrl en mode wx.LC_REPORT, augmentée avec ListCtrlAutoWidthMixin.

Le problème est le suivant: Quand l'utilisateur clique deux fois le diviseur sur colonne (colonne de redimensionnement automatique), la largeur de la colonne est réglée pour correspondre à la largeur du contenu. Cela se fait par la bibliothèque WX et redimensionne colonne juste quelques pixels lorsque la commande est vide.

J'ai essayé d'appeler

  

self.SetColumnWidth (colNumber, wx.LIST_AUTOSIZE_USEHEADER)

tout en créant la liste, mais il définit simplement la largeur initiale de la colonne, et non la largeur minimale autorisée.

Toute personne a réussi à mettre la colonne largeur minimale?

EDIT: J'ai essayé la capture

 wx.EVT_LEFT_DCLICK 

sans succès. Cet événement ne génère pas de diviseur double colonne de clics de l'utilisateur. Aussi essayé avec

wx.EVT_LIST_COL_END_DRAG 

cet événement est généré, généralement deux fois, pour le double clic, mais je ne vois pas comment puis-je récupérer des informations sur la nouvelle taille, ou comment différencier un double clic de drag & drop. Tout le monde a d'autres idées?

Était-ce utile?

La solution 2

Ok, après une lutte que je suis solution de travail pour cela. Il est laid du point de vue de la conception, mais fonctionne assez bien pour moi.

Voilà comment cela fonctionne:

  1. Stocker la largeur initiale de la colonne.

    self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER)
    
    self.__columnWidth[colNum] = self.GetColumnWidth(c)
    
  2. Inscrivez-gestionnaire pour la mise à jour événement de l'interface utilisateur.

    wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
    
  3. Et écrire la fonction de gestionnaire.

    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 est intentionnelle, de sorte que la dernière colonne est pas redimensionnée. Je sais que ce n'est pas une solution élégante, mais il fonctionne assez bien pour moi - vous ne pouvez pas faire des colonnes trop petites en double cliquant sur diviseurs (en fait - vous ne pouvez pas le faire du tout) et double-cliquant sur le diviseur après dernière colonne redimensionne la dernière colonne pour adapter la largeur de commande de la liste.

Pourtant, si quelqu'un sait meilleure solution s'il vous plaît poster.

Autres conseils

Honnêtement, j'ai cessé d'utiliser le wx.ListCtrl natif en faveur de l'utilisation ObjectListView . Il y a un peu d'une courbe d'apprentissage, mais il y a beaucoup d'exemples. Cette serait intéressant à votre question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top