Come impostare e conservare larghezza minima?
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?
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:
-
Conservare la larghezza iniziale di colonna.
self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER) self.__columnWidth[colNum] = self.GetColumnWidth(c)
-
Registrati gestore per l'evento di aggiornamento dell'interfaccia utente.
wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
-
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.