Frage

Wenn ich das Format der ersten Spalte in einem ListCtrl auszurichten Zentrum (oder align rechts) nichts passiert. Es funktioniert für die anderen Spalten.

Das geschieht nur unter Windows - Ich habe es auf Linux getestet und es funktioniert gut. Hat jemand wissen, ob es ein arbeits runde oder andere Lösung?

Hier ist ein Beispiel, basierend auf Code unter http://zetcode.com/wxpython/

import wx
import sys

packages = [('jessica alba', 'pomona', '1981'), ('sigourney weaver', 'new york',    '1949'),
    ('angelina jolie', 'los angeles', '1975'), ('natalie portman', 'jerusalem', '1981'),
    ('rachel weiss', 'london', '1971'), ('scarlett johansson', 'new york', '1984' )]

class Actresses(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(380, 230))

        hbox = wx.BoxSizer(wx.HORIZONTAL)
        panel = wx.Panel(self, -1)

        self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT)
        self.list.InsertColumn(0, 'name', wx.LIST_FORMAT_CENTRE,width=140)
        self.list.InsertColumn(1, 'place', wx.LIST_FORMAT_CENTRE,width=130)
        self.list.InsertColumn(2, 'year', wx.LIST_FORMAT_CENTRE, 90)

        for i in packages:
            index = self.list.InsertStringItem(sys.maxint, i[0])
            self.list.SetStringItem(index, 1, i[1])
            self.list.SetStringItem(index, 2, i[2])

        hbox.Add(self.list, 1, wx.EXPAND)
        panel.SetSizer(hbox)

        self.Centre()
        self.Show(True)

app = wx.App()
Actresses(None, -1, 'actresses')
app.MainLoop()
War es hilfreich?

Lösung

ich gefunden habe, dass dies funktioniert (man beachte ich die Spalten bei 1 beginnen Einsetzen statt 0):

    self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT)
    self.list.InsertColumn(1, 'name', wx.LIST_FORMAT_CENTRE,width=140)
    self.list.InsertColumn(2, 'place', wx.LIST_FORMAT_CENTRE,width=130)
    self.list.InsertColumn(3, 'year', wx.LIST_FORMAT_CENTRE, 90)

Nicht sicher, warum dies funktioniert, aber es funktioniert. Hoffentlich wird es keine Auswirkungen aus dies zu tun.

Dank robots.jpg für die Idee gebracht.

Andere Tipps

Windows behandelt auf jeden Fall die erste Spalte unterschiedlich. Eine Abhilfe ist, eine leere Spalte 0 zu erstellen und zu verstecken:

class Actresses(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(380, 230))
        #...

        self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT)
        self.list.InsertColumn(0, '', width=0)
        self.list.InsertColumn(1, 'name', wx.LIST_FORMAT_CENTRE,width=140)
        self.list.InsertColumn(2, 'place', wx.LIST_FORMAT_CENTRE,width=130)
        self.list.InsertColumn(3, 'year', wx.LIST_FORMAT_CENTRE, width=90)

        for i in packages:
            index = self.list.InsertStringItem(sys.maxint, '')
            self.list.SetStringItem(index, 1, i[0])
            self.list.SetStringItem(index, 2, i[1])
            self.list.SetStringItem(index, 3, i[2])

        # catch resize event
        self.list.Bind(wx.EVT_LIST_COL_BEGIN_DRAG, self.OnColDrag)
        #...

    def OnColDrag(self, evt):
        if evt.m_col == 0:
            evt.Veto()

Ich kann mich an keine größeren Nebenwirkungen von diesem zu tun, aber lassen Sie mich wissen, wenn ich falsch bin. Ich denke, GetItemText () oder etwas anderes, es ist sinnvoll, Daten in der ersten Spalte wird davon ausgegangen würden nicht mehr von Nutzen sein.

Bearbeiten -. Hinzugefügt Code Ändern der Größe zu verhindern, Spalte 0

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