0

我知道有很多设置布局的设置。这是ListCtrl水平尺寸器内的固定尺寸。

在此处输入图像描述

这个绝对大小要么显示剩余空间,要么太小,具体取决于列数。

绘制 a 的布局命令是ListCtrl什么?

如何使ListCtrl响应更灵敏,以便:

  • 一目了然地显示来自多列的数据,无需调整大小
  • 在不同的 GUI 和调整大小时不会变坏

托管列表的面板的代码清单:

class CalcPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        self.lc = wx.ListCtrl(self, -1, size=(200,200), style=wx.LC_REPORT)
        self.lc.InsertColumn(0, 'State')
        self.lc.InsertColumn(1, 'Capital')
        #self.lc.SetColumnWidth(0, 140)
        #self.lc.SetColumnWidth(1, 153)
    #self.list_ctrl.Show()

        self.sizer = wx.BoxSizer(wx.HORIZONTAL)

        btn = wx.Button(self, label="Add Line")

        self.sizer.Add(btn)
        self.sizer.Add(self.lc, 1, wx.LEFT | wx.TOP | wx.GROW)
        self.SetSizer(self.sizer)
        self.Fit()

    def InitUI(self):
    pass
4

2 回答 2

2

你看过wx.lib.mixins.listctrl.ListCtrlAutoWidthMixin吗?

如果您继承自wx.lib.mixins.listctrl.ListCtrlAutoWidthMixinas well ,并在您的方法中wx.ListCtrl调用类,则最后一列将使用 resize 事件自动调整大小__init____init__

您还可以更改自动调整大小的列setResizeColumn

于 2012-06-18T11:20:59.097 回答
0

我提交了一个完全错误的答案,因为我没有很好地阅读这个问题。为了弥补这个错误,我做了一些研究,我认为我有一个可行的答案。

检查wx.ListCtrl API,我发现了一种SetColumnWidth(self, col, width)我认为完全符合您要求的方法。

你说你wx.ListCtrl的是固定宽度?在这种情况下...

lcWidth = 200
lcHeight = 200

self.lc = wx.ListCtrl(self, -1, size=(lcWidth,lcHeight), style=wx.LC_REPORT)
self.lc.InsertColumn(0, 'State')
self.lc.InsertColumn(1, 'Capital')

stateWidth = self.lc.GetColumnWidth(0)
self.lc.SetColumnWidth(1, (lcWidth - stateWdith))

顺便说一句,如果您希望wx.ListCtrl保持固定大小,则应从调用中删除该wx.GROW标志。将调整项目的大小以填充所有可用空间,而不是您想要的。self.sizer.Add()wx.GROW

self.sizer.Add(self.lc, 1, wx.LEFT | wx.TOP)

如果您wx.ListCtrl不是固定宽度,则可以声明一个自定义wx.ListCtrl来相应地处理此调整大小

class ResizingColListCtrl (wx.ListCtrl):
    def __init__(self, *args, **kwargs):
        wx.ListCtrl.__init__(self, *args, **kwargs)

        self.sizeColumns()

        self.Bind(EVT_SIZE, self.sizeColumns)

    def sizeColumns(event=None)
        width = self.GetSize()[0]
        numCols = self.GetColumnCount()

        for i in range(numCols):
             self.SetColumnWidth(i, width/numCols) #set your column width to whatever proportions you want

        if event:
            event.Skip() #since this is a wx.EVT_SIZE, this line is important

据我所知,wxPython 本身并没有这个功能。

于 2012-06-17T01:32:28.047 回答