Domanda

Faccio uso di alcune classi wx.ListCtrl in modalità wx.LC_REPORT, aumentata con ListCtrlAutoWidthMixin.

Il problema è: quando si fa clic doppie utente il divisore di colonna (la colonna Ridimensionamento automatico), la larghezza delle colonne è impostato in base alla larghezza dei contenuti. Questo viene fatto dalla libreria WX e ridimensiona colonna per pochi pixel quando il controllo è vuoto.

Ho provato a chiamare

  

self.SetColumnWidth (colNumber, wx.LIST_AUTOSIZE_USEHEADER)

durante la creazione della lista, ma imposta solo la larghezza della colonna iniziale, non è la larghezza minima consentita.

Chiunque è riuscito con l'impostazione della colonna larghezza minima?

EDIT: provato cattura

 wx.EVT_LEFT_DCLICK 

senza successo. Questo evento non viene generato quando l'utente clicca colonna divisore. provato anche con

wx.EVT_LIST_COL_END_DRAG 

Questo evento viene generato, di solito due volte, per il doppio clic, ma non vedo come posso recuperare le informazioni su nuove dimensioni, o come differenziare doppio click da drag & drop. Chiunque ha alcune altre idee?

È stato utile?

Soluzione 2

Ok, dopo un po 'mi sono lotte soluzione a lavorare per questo. E 'brutto dal punto di vista progettuale, ma funziona abbastanza bene per me.

Ecco come funziona:

  1. Conservare la larghezza iniziale di colonna.

    self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER)
    
    self.__columnWidth[colNum] = self.GetColumnWidth(c)
    
  2. Registrati gestore per l'evento di aggiornamento dell'interfaccia utente.

    wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
    
  3. E scrivere la funzione del gestore.

    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 è intenzionale, quindi l'ultima colonna non viene ridimensionato. So che questo non è una soluzione elegante, ma funziona abbastanza bene per me - non è possibile effettuare le colonne troppo piccole facendo doppio clic sul divisori (in realtà - non si può fare a tutti) e fare doppio clic sul divisore dopo ultima colonna ridimensiona l'ultima colonna per adattare la larghezza controllo elenco.

Ancora, se qualcuno sa soluzione migliore si prega di postare.

Altri suggerimenti

Onestamente, ho smesso di usare il wx.ListCtrl nativo a favore di usare ObjectListView . C'è un po 'di una curva di apprendimento, ma ci sono un sacco di esempi. Questo sarebbe di interesse per la tua domanda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top