Frage

Ich benutze wx.ListCtrl Klassen in wx.LC_REPORT Modus, ergänzt mit ListCtrlAutoWidthMixin.

Das Problem ist: Wenn der Benutzer doppelklickt die Spaltenteiler (zu Autoskal Spalte), Spaltenbreite eingestellt wird, um die Breite des Inhalts anzupassen. Dies wird durch die wx Bibliothek gemacht und passt die Größe Spalte nur wenige Pixel, wenn die Steuerung ist leer.

Ich habe versucht Aufruf

  

self.SetColumnWidth (colNumber, wx.LIST_AUTOSIZE_USEHEADER)

während der Erstellung die Liste, aber es wird nur die anfängliche Spaltenbreite, nicht die minimal zulässige Breite.

Jeder konnte mit Spalte minimale Breite einstellen?

EDIT: Versuchte Fang

 wx.EVT_LEFT_DCLICK 

ohne Erfolg. Dieses Ereignis wird nicht generiert, wenn der Benutzer doppelklickt Spalt Teiler. Auch versucht mit

wx.EVT_LIST_COL_END_DRAG 

Dieses Ereignis wird generiert, in der Regel zweimal, für Doppelklick, aber ich sehe nicht, wie kann ich Informationen über neue Größe abrufen, oder wie Doppelklick von Drag & Drop zu unterscheiden. Jeder hat einige andere Ideen?

War es hilfreich?

Lösung 2

Ok, nach einiger Anstrengung ich Abhilfe für die Arbeit hätte. Es ist hässlich aus Sicht des Designs, funktioniert aber gut genug für mich.

Das ist, wie es funktioniert:

  1. Speichern Sie die ursprüngliche Breite der Spalte.

    self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER)
    
    self.__columnWidth[colNum] = self.GetColumnWidth(c)
    
  2. Register Handler für Update UI-Ereignis.

    wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
    
  3. Und schreiben Sie die Handler-Funktion.

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

Die self.GetColumnCount () - 1 ist beabsichtigt, so dass die letzte Spalte nicht geändert wird. Ich weiß, dass dies nicht eine elegante Lösung, aber es funktioniert für mich gut genug - Sie keine Spalten zu klein durch einen Doppelklick auf Teiler machen (in der Tat - man kann es gar nicht tun) und einen Doppelklick auf dem Teiler nach letzte Spalte ändert die Größe der letzten Spalte Liste Steuerbreite passen.

Dennoch, wenn jemand eine bessere Lösung weiß, bitte posten.

Andere Tipps

Ehrlich gesagt, ich habe aufgehört mit dem nativen wx.ListCtrl zugunsten der Verwendung von Object . Es ist ein bisschen eine Lernkurve, aber es gibt viele Beispiele. Diese von Interesse für Ihre Frage wäre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top