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

这个绝对大小要么显示剩余空间,要么根据列数太小。
绘制ListCtrl的布局命令是什么?
如何使ListCtrl更有响应性,使其:
承载列表的面板的代码列表:
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发布于 2012-06-18 11:20:59
你看过wx.lib.mixins.listctrl.ListCtrlAutoWidthMixin吗
如果您继承了wx.lib.mixins.listctrl.ListCtrlAutoWidthMixin和wx.ListCtrl,并在__init__方法中调用了类__init__,那么最后一列将通过调整大小事件自动调整大小。
您还可以用setResizeColumn更改哪个列自动调整大小。
发布于 2012-06-17 01:32:28
我提交了一个完全错误的答案,因为我读得不够好。为了弥补这个错误,我做了一些研究,我认为我有一个可行的答案。
检查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保持固定大小,您应该从您的self.sizer.Add()调用中删除wx.GROW标志。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本机没有这种功能。
https://stackoverflow.com/questions/11062864
复制相似问题