Не может отформатировать первый столбец в listctrl wxpython

StackOverflow https://stackoverflow.com/questions/3059781

  •  28-09-2019
  •  | 
  •  

Вопрос

Если я установлю формат первого столбца в ListCTRL для выравнивания Center (или выровнять справа), ничего не происходит. Работает для других колонн.

Это происходит только в Windows - я проверил его на Linux, и он работает нормально. Кто-нибудь знает, есть ли работа или другое решение?

Вот пример, основанный на коде, найденном в 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()
Это было полезно?

Решение

Я обнаружил, что это работает (обратите внимание, что я начну вставлять столбцы в 1, а не 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)

Не уверен, почему это работает, но это делает. Надеюсь, от этого не будет никаких последствий.

Благодаря Robots.jpg для вдохновения идеи.

Другие советы

Windows определенно относится к первому столбцу по-разному. Один обходной путь состоит в том, чтобы создать пустой столбец 0 и скрыть его:

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

Я не могу думать о каких-либо основных побочных эффектах, но дайте мне знать, если я ошибаюсь. Я думаю, что GetItemText () или что-то еще, что предполагает, что есть полезные данные в первом столбце больше не будут полезны.

Изменить - добавленный код для предотвращения размера столбца 0.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top