문제

나는 WX.Python에서 일하고 있으며 WX.listctrl의 열을 자동 재구성 IE로 가져 오려면 열 이름의 너비를 최소화하고 가장 넓은 요소 또는 열 이름만큼 넓게 만들고 싶습니다. 처음에 나는 listctrlautowidthmixin이 이것을 할 수 있다고 생각했지만, 그것은 내가 직접해야 할 것 같지 않기 때문에 (이것을하는 방식에 내장 된 것이 있다면 나를 바로 잡으십시오 !!!).

내 목록의 제목과 요소가 얼마나 광범위하게 렌더링되는지 어떻게 알 수 있습니까?

도움이 되었습니까?

해결책

예, 당신은 wx.listctrl을 위해 직접 만들어야 할 것입니다. 그리고 나는 그것이 올바르게하는 것이 쉽거나 우아한지 확실하지 않습니다.

wx.grid를 사용하는 것을 고려하십시오. 다음은 다음과 같은 작은 예입니다.

import wx, wx.grid

class GridData(wx.grid.PyGridTableBase):
    _cols = "This is a long column name,b,c".split(",")
    _data = [
        "1 2 3".split(),
        "4,5,And here is a long cell value".split(","),
        "7 8 9".split()
    ]

    def GetColLabelValue(self, col):
        return self._cols[col]

    def GetNumberRows(self):
        return len(self._data)

    def GetNumberCols(self):
        return len(self._cols)

    def GetValue(self, row, col):
        return self._data[row][col]


class Test(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        grid = wx.grid.Grid(self)
        grid.SetTable(GridData())
        grid.EnableEditing(False)
        grid.SetSelectionMode(wx.grid.Grid.SelectRows)
        grid.SetRowLabelSize(0)
        grid.AutoSizeColumns()


app = wx.PySimpleApp()
app.TopWindow = Test()
app.TopWindow.Show()
app.MainLoop()

다른 팁

Jakepars 답변 외에도 : 헤더가 더 크든 또는 열에서 가장 많은 공간을 차지하는 항목을 확인해야합니다. 우아하지는 않지만 일하는 ...

import wx

class Frame(wx.Frame):
    def __init__(self, *args, **kw):
        wx.Frame.__init__(self, *args, **kw)

        self.list = wx.ListCtrl(self, style=wx.LC_REPORT)
        items = ['A', 'b', 'something really REALLY long']
        self.list.InsertColumn(0, "AAAAAAAAAAAAAAAAAAAAAAAA")
        for item in items:
            self.list.InsertStringItem(0, item)
        self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
        a = self.list.GetColumnWidth(0)
        print "a " + str(a)
        self.list.SetColumnWidth(0,wx.LIST_AUTOSIZE_USEHEADER)
        b = self.list.GetColumnWidth(0)
        print "b " + str(b)
        if a>b:
            print "a is bigger"
            self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
app = wx.App(False)
frm = Frame(None, title="ListCtrl test")
frm.Show()
app.MainLoop()

wx.listctrl과 관련된 많은 두통을 저장하려면 사용으로 전환해야합니다. ObjectListView (코드 예제를위한 멋진 요리 책과 포럼이 있습니다). 그것은 매우 훌륭하고 매우 기본적인 ListCtrl 이상으로 사용하는 경향이 있습니다. 매우 강력하고 유연하며 코딩하기 쉽기 때문입니다. 여기에 있습니다 Wxpywiki 페이지 관련 (예제 코드 포함). 개발자는 WXPYTHON 메일 링리스트에도 있으므로 질문이있는 이메일을 보낼 수 있습니다.

이것은 나를 위해 작동합니다

import wx

class Frame(wx.Frame):
    def __init__(self, *args, **kw):
        wx.Frame.__init__(self, *args, **kw)

        self.list = wx.ListCtrl(self, style=wx.LC_REPORT)
        items = ['A', 'b', 'something really REALLY long']
        self.list.InsertColumn(0, "AA")
        for item in items:
            self.list.InsertStringItem(0, item)
        self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)

app = wx.App(False)
frm = Frame(None, title="ListCtrl test")
frm.Show()
app.MainLoop()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top